cf319b Psychos in a Line(单调队列 贪心)

 

 

#include<cstdio>

#include<cstdlib>

#include<cstring>

#include<iostream>

#include<algorithm>

#include<cmath>

using namespace std;

#define MAXN 100000+10

int n,st[MAXN],cnt,a[MAXN],kill[MAXN]={0},f[MAXN]={0};

int main()

{

    int ans;

    int i;

    while(scanf("%d",&n)!=EOF)

    {

        memset(kill,0,sizeof(kill));

        memset(f,0,sizeof(f));//f[i]  表示  [i,n]中i杀人的次数

        cnt=0;ans=0;

        

        for(i=1;i<=n;i++)

            scanf("%d",&a[i]);

        

        for(i=n;i>0;i--)

        {

         int t=0;

         while (cnt&&a[st[cnt]]<a[i])

         {

                t++;

                f[i]=t=max(t,f[st[cnt]]);

                cnt--;

         }

         st[++cnt]=i;

         ans=max(ans,t);

        }

       printf("%d\n",ans);

    }

    return 0;

}

  

你可能感兴趣的:(OS)