历时一个月终于在摸鱼与学习中AC了她
#include <iostream>
#include <queue>
using namespace std;
int n, k;
int a[1000005];
deque<int>maxx, minn;
int main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
//让框保持在k个格子以内
if (!minn.empty() && i - minn.front() >= k)
minn.pop_front();
//k=3, a1 = 3 a2 = 2, i = 3,a[3] = 1
//跑完while后队列里面只剩3即最小值a3=1的位置
while (!minn.empty() && a[i] <= a[minn.back()]) {
minn.pop_back();
}
//不管怎么样都推i入列尾
minn.push_back(i);
//i>=k保证每次都是处理K个元素
if (i >= k)
printf("%d ", a[minn.front()]);
}
printf("\n");
//同上
for (int i = 1; i <= n; i++) {
if (!maxx.empty() && i - maxx.front() >= k)
maxx.pop_front();
while (!maxx.empty() && a[i] >= a[maxx.back()]) {
maxx.pop_back();
}
maxx.push_back(i);
if (i >= k)
printf("%d ", a[maxx.front()]);
}
return 0;
}