#include<iostream>
#include<algorithm>
using namespace std;
int h[9999], ans[9999];
struct endpoint//存储每个递减序列的末尾元素的下标和高度
{
int num = 0;
int h2 = 0;
}ep[9999];
bool cmp(struct endpoint p1, struct endpoint p2)
{
return (p1.h2 < p2.h2);//将每个递减序列的末尾元素按照对应高度排序
}
int main()
{
int n;
while (cin >> n)
{
int flag = 0;
for (int i = 0; i < n; i++) cin >> h[i];
for (int i = 0; i < n; i++)
{
ep[i].h2 = 0;
ep[i].num = 0;
}
ans[0] = 1;
ep[0].num = 0;
ep[0].h2 = h[0];
for (int i = 1; i < n; i++)
{
sort(ep, ep + n, cmp);
for (int k = 0; k < n; k++)
{
if (h[i] <= ep[k].h2&&flag==0)
{
flag = 1;
ep[k].num = i;
ep[k].h2 = h[i];
}
}
if (flag == 0)
{
ep[0].num = i;
ep[0].h2 = h[i];
}
ans[i] = ans[i - 1] + 1 - flag;
flag = 0;
}
cout << ans[n - 1] << endl;//答案
}
}
自己的思路可能和别人不一样(我感觉自己的思路挺简单的哈哈),留在这里方便自己日后查看,感兴趣的也可以看看