#include<bitsdc++.h> struct Node { int num; Node* next; }; struct Stack{ Node* b; //栈底指针 Node* t; //栈顶指针 int size=0; int top(){ ○1 } void push(int num){ ○2 } void pop(){ ○3 } int Max(){ ○4 } ...... };使用遍历获取队列中的极值,完成洛谷p1886
时间: 2024-01-27 19:03:32 浏览: 94
这是一个栈的实现,而洛谷p1886需要使用队列实现获取极值。因此,需要将栈的实现改为队列的实现。
具体来说,需要使用两个队列q和maxq,其中q用来存储数据,maxq用来存储当前队列中的最大值。具体实现如下:
```
#include <bits/stdc++.h>
using namespace std;
struct Queue {
queue<int> q;
queue<int> maxq;
void push(int num) {
q.push(num);
while (!maxq.empty() && maxq.back() < num) {
maxq.pop();
}
maxq.push(num);
}
void pop() {
if (q.empty()) return;
if (q.front() == maxq.front()) maxq.pop();
q.pop();
}
int top() {
return q.front();
}
int Max() {
return maxq.front();
}
};
int main() {
int n, m;
cin >> n >> m;
Queue q;
for (int i = 0; i < m; i++) {
int num;
cin >> num;
q.push(num);
}
cout << q.Max() << " ";
for (int i = m; i < n; i++) {
int num;
cin >> num;
q.push(num);
q.pop();
cout << q.Max() << " ";
}
cout << endl;
return 0;
}
```
这样就能够使用队列实现获取极值了。
阅读全文