维护一个递增的队列,每次队首进,队尾出,取队尾元素(下标相差在m之内的)
#include
#include
#include
#include
#include
using namespace std;
typedef long long LL;
const int maxn=2000005;
struct node{
int v,id;
}a[maxn];
int ans[maxn];
int n,m;
deque dq;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].v);
a[i].id=i;
}
ans[1]=0;
for(int i=2;i<=n;i++){
while(!dq.empty()&&dq.front().v>=a[i-1].v){
dq.pop_front();
}
dq.push_front(a[i-1]);
while(dq.back().idfor(int i=1;i<=n;i++){
printf("%d\n",ans[i]);
}
return 0;
}