/*
首先这个算法不是我想出来的,是看了别人的算法后添加了自己的理解
这个题目的解题思路和正常思维不同
不是将每个位置视为起点,而是视为终点,求出该位置的最大上升次数
再求出所有位置的最大上升次数的最大值
*/
include
using namespace std;
define max(a,b) (a>b)?a:b
int main(){
int n;
while(cin >> n){
int array[65536] = {0};//输入缓存
int times[65536] = {0};//对应每个位置之前的最大上升次数
int max_times = 1;//最大上升次数,输出值
for (int i = 0; i < n; i++) cin >> array[i]; times[0] = 1; for (int i = 1; i < n; i++){ times[i] = 1; for(int j = 0; j < i; j++){ if (array[i]>array[j]) times[i] = max(times[i], times[j]+1); } if (times[i] > max_times) max_times = times[i]; } cout << max_times << endl; } return 0;
}