单调队列模板
class MaxQueue {
private:
queue<int> origin;
deque<int> dq;
public:
MaxQueue() {
}
int max_value() {
return !dq.empty() ? dq.front() : -1;
}
void push_back(int value) {
origin.push(value);
while (!dq.empty() && dq.back() < value) {
dq.pop_back();
}
dq.push_back(value);
}
int pop_front() {
if (origin.empty()) return -1;
int tmp = origin.front();
origin.pop();
if (tmp == dq.front()) {
dq.pop_front();
}
return tmp;
}
};
能够解决以下问题: