deque用法详解
方法二:维护一个单调的双端队列
官方方法2“双端队列”动画图解
维护一个单调的双端队列
class MaxQueue {
private:
queue<int> q;
deque<int> d;
public:
MaxQueue() {
}
int max_value() {
if(d.empty()) return -1;
return d.front();
}
void push_back(int value) {
while(!d.empty()&&d.back()<value) d.pop_back();
d.push_back(value);
q.push(value);
}
int pop_front() {
if(q.empty()) return -1;
int ans=q.front();
if(ans==d.front()) d.pop_front();
q.pop();
return ans;
}
};