代码在下面,AC#2 #3 #9
思路是拿两个指针做类似单调队列的处理,但略有不同(我不会写常规的单调队列QAQ)
样例能过,自己搓了点小数据也都过了,在纸上推了半天也没看出来问题在哪
求救!
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int a[N];
int *first,*last;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n,k;
cin>>n>>k;
for(int i=0;i<n;++i){
cin>>a[i];
}
first=last=a;
for(int i=0;i<n;++i){ //维护最小值
if(last-first+1>k) {
first++;
while(first<last&&*first>=*(first+1)) first++;
}
if(*first>=*last) first=last;
if(i>=k-1) cout<<*first<<' ';
last++;
}
cout<<'\n';
first=last=a;
for(int i=0;i<n;++i){ //维护最大值
if(last-first+1>k) {
first++;
while(first<last&&*first<=*(first+1)) first++;
}
if(*first<=*last) first=last;
if(i>=k-1) cout<<*first<<' ';
last++;
}
return 0;
}