#include<bits/stdc++.h>
using namespace std;
const int MAXN=50050;
int a[MAXN],dis[MAXN];
vector<int> g[MAXN];
int dfs(int x)
{
if(dis[x]!=-1)
return dis[x];
int i,ret=1;
for(i=0;i<g[x].size();i++)
ret=max(ret,dfs(g[x][i])+1);
return dis[x]=ret;
}
int main()
{
int n,i,ans;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
g[i].clear();
memset(dis,-1,sizeof(dis));
stack<int> stk;
for(i=0;i<n;i++)
{
while(!stk.empty()&&a[stk.top()]<a[i])
{
g[i].push_back(stk.top());
stk.pop();
}
if(!stk.empty())
g[stk.top()].push_back(i);
stk.push(i);
}
ans=0;
for(i=0;i<n;i++)
ans=max(ans,dfs(i));
printf("%d\n",ans);
}
}
51nod 1153 选择子序列
最新推荐文章于 2020-08-23 19:04:40 发布