#include<bits/stdc++.h>
const int N = 1000010;
using namespace std;
int n, k, a;
struct s{
int v, num;
};
deque <s> q1, q2;
int ans1[N], ans2[N];
int main(){
cin>> n>> k;
s q;
for(int i = 1; i <= n; i ++){
cin>> a;
q.v = a;
q.num = i;
while(!q1.empty() && a <= q1.back().v) q1.pop_back();
q1.push_back(q);
if(q1.front().num + k <= i) q1.pop_front();
while(!q2.empty() && a >= q2.back().v) q2.pop_back();
q2.push_back(q);
if(q2.front().num + k <= i) q2.pop_front();
if(i >= k){
ans1[i - k + 1] = q1.front().v;
ans2[i - k + 1] = q2.front().v;
}
}
for(int i = 1; i <= n - k + 1; i ++) cout<< ans1[i]<<" ";
cout<< endl;
for(int i = 1; i <= n - k + 1; i ++) cout<< ans2[i]<<" ";
return 0;
}
用双端队列做的,写着写着有点不太理解,为什么21和22行,以及25和26行不能换一下前后顺序,即为什么不可以先把滑出窗口的弹出去然后再将新元素压进来呢?
上面贴的这个代码是对的,然后换一下顺序就不对了,脑子有点绕不过弯不是特别能理解,来求大佬解释一下谢谢!