题意
给出一个数列,求出每个数到它的后k-1位中的数的最大值。
思路
和1440差不多,这里我们只要维护一个单调不上升的队列。
代码
#include<cstdio>
int a[2000001],q[2000001],n,k,tail,head;
int main()
{
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
while (head<=tail&&a[i]>a[q[tail]]) tail--;//单调不递增
q[++tail]=i;
if (i-q[head]==k) head++;//表示超出范围了
if (i>=k) printf("%d\n",a[q[head]]);
}
}