//题意:给你长度为n的序列ss 只要ss[i]>ss[i+1] ss[i]就可以吃掉ss[i+1]
//hint里的样例很明白了 [10 9 7 8 6 5 3 4 2 1] → [10 8 4] → [10].
//方法就是利用栈模拟o(n)的效率求出每个元素第几次被吃掉,然后取最大值即可
// main.c
// example
//
// Created by Adam on 15/2/2.
// Copyright (c) 2015年 Adam. All rights reserved.
//
#include <iostream>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "algorithm"
#include <queue>
#include <stack>
#define N 1800000
#define LL long long int
using namespace std;
struct node {
int data;
int step;
};
int main()
{
int n;
int ss[100005];
stack <struct node> que2;
while(scanf("%d",&n)!=EOF)
{
while( !que2.empty() ) que2.pop(); //清空栈
for( int i=0; i<n; i++)
scanf("%d", &ss[i]);
int i=0;
while( i<(n-1) && ss[i]<=ss[i+1] ) i++;//找到第一个入栈的元素 就是第一个可以吃别人的元素
node tmp;
tmp.data = ss[i++]; tmp.step = 0;
que2.push(tmp);//将其入栈
int ans=0,sm;
for( ;i<n; i++ )
{
node p=que2.top();
if(ss[i]<p.data) //如果当前的元素小于栈顶元素
tmp.data = ss[i] , tmp.step = 1;
else{//否则找到下一个吃它的人的下一个位置
sm = 0;
while( !que2.empty() )
{
tmp = que2.top();
if( tmp.data < ss[i] ) {
sm = max(sm,tmp.step); //找到step的最大值
que2.pop();
}
else break;
}
tmp.data = ss[i];
if( que2.empty() ) tmp.step=0; //如果找不到 step置为0
else tmp.step = sm+1;//如果找到了 step为中间被吃的各个元素的step的最大值
}
que2.push( tmp );//入栈
ans=max( ans,tmp.step ); //取最大step
}
printf("%d\n",ans);
}
return 0;
}