P3572 [POI2014]PTA-Little Bird

 

 常規單調隊列,然而我仍是寫的容易出鍋,單調隊列好難==c++


#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;
    }
}
相關文章
相關標籤/搜索