单调队列(滑动窗口)
#include <iostream>
using namespace std;
using ll = long long;
const int maxn=1e6+10;
int n,k,a[maxn],q[maxn];
int main(){
ios::sync_with_stdio(false);
cin>>n>>k;
for(int i=0;i<n;i++)cin>>a[i];
int l=0,r=-1;
for(int i=0;i<n;i++){
while(l<=r&&i-k+1>q[l])l++;
while(l<=r&&a[q[r]]>=a[i])r--;
q[++r]=i;
if(i>=k-1)cout<<a[q[l]]<<" ";
}
cout<<endl;
l=0,r=-1;
for(int i=0;i<n;i++){
while(l<=r&&i-k+1>q[l])l++;
while(l<=r&&a[q[r]]<=a[i])r--;
q[++r]=i;
if(i>=k-1)cout<<a[q[l]]<<" ";
}
}
维护递增序列

浙公网安备 33010602011771号