欢迎来到SFWR的博客

P3572 [POI2014]PTA-Little Bird

 

 常规单调队列,然而我还是写的容易出锅,单调队列好难==


#include<bits/stdc++.h>
using namespace std;
int n,m,num[1001000],k,l,r,f[1001000],que[1001000];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>num[i];cin>>m;
    while(m--)
    {
        cin>>k;
        que[l=r=1]=1;
        for(int i=2;i<=n;i++)
        {
        while(l<=r&&i-k>que[l])l++;
        f[i]=f[que[l]]+(num[i]>=num[que[l]]);    
        while((l<=r)&&((f[que[r]]>f[i])||((f[que[r]]==f[i])&&(num[que[r]]<=num[i]))))--r;
        que[++r]=i;
        }
        cout<<f[n]<<endl;
    }
}

 

posted @ 2019-10-14 20:23  SFWR  Views(119)  Comments(0Edit  收藏  举报