洛谷P1886
额啊,这破模板题,单调队列一定要存数组下标
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
deque<int> q;
// 最小值
for (int i = 0; i < n; i++) {
// 保持单调递增:队尾元素比当前元素大,就弹出
while (!q.empty() && a[q.back()] >= a[i]) q.pop_back();
q.push_back(i);
// 超出窗口左边界,弹出
if (q.front() <= i - k) q.pop_front();
if (i >= k - 1) cout << a[q.front()] << ' ';
}
cout << '\n';
q.clear();
// 最大值
for (int i = 0; i < n; i++) {
// 保持单调递减:队尾元素比当前元素小,就弹出
while (!q.empty() && a[q.back()] <= a[i]) q.pop_back();
q.push_back(i);
// 超出窗口左边界,弹出
if (q.front() <= i - k) q.pop_front();
if (i >= k - 1) cout << a[q.front()] << ' ';
}
cout << '\n';
return 0;
}