1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class MaxQueue { public: MaxQueue() {
} int max_value() { if(nodes.empty()) return -1; return helper.front(); } void push_back(int value) { while(!helper.empty() && value > helper.back()) helper.pop_back(); helper.push_back(value); nodes.push_back(value); } int pop_front() { if(nodes.empty()) return -1; if(helper.front() == nodes.front()) helper.pop_front(); auto ret = nodes.front(); nodes.pop_front(); return ret; } private: deque<int> nodes; deque<int> helper; };
|