洛谷_2032 扫描

题意

给出一个数列,求出每个数到它的后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]]);
    }
}

猜你喜欢

转载自blog.csdn.net/ssl_hzb/article/details/80741034