单调队列是一种主要用于解决滑动窗口类问题的数据结构,即,在长度为n的序列中,求每个长度为m的区间的区间最值。
//得到的是一个单调递减的队列 deque<int> Q; // 存储的是编号 for (int i = 0; i < n; ++i) { if (!Q.empty() && i - Q.front() >= m) //编号在当前滑动窗口外 Q.pop_front(); while (!Q.empty() && V[Q.back()] < V[i]) //新加进的数比之前的都要大 Q.pop_back(); Q.push_back(i); // 入队 if (i >= m - 1) cout << V[Q.front()] << " "; }