版权声明:转载请注明出处: https://blog.csdn.net/weixin_43871781/article/details/87822598
单调队列(增):
int main()
{
int n,k,head,tail,a[105],b[105];
while(~scanf("%d%d",&n,&k))
{
memset(b,-1,sizeof(b));
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
head=1;tail=1;
b[head]=1;
for(int i=1;i<=k;i++)
{
while(head<=tail&&a[i]>a[b[tail]])tail--;
b[++tail]=i;
}
for(int i=k;i<=n;i++)
{
while(head<=tail&&a[i]>a[b[tail]])tail--;
b[++tail]=i;
while(head<=tail&&b[head]<i-k+1)head++;
printf("%d\n",a[b[head]]);
}
}
return 0;
}