#include <iostream> using namespace std; int a[100010],b[100010];//b数组用来记录当前情况下各位最小值的递增子序列 int main() { int n; cin>>n; for(int i = 0; i < n; i++) { cin>>a[i]; } int flag = 1; b[0] = -2000000000; b[flag] = a [0]; for(int i = 1; i < n; i++) { if(a[i] > b[flag]) b[++flag] = a[i];//如果a[i]比b的最后一个值大 向后加 else //否则查找插入位置(下一个数比a[i]大 这个数比a[i]小) { for(int j = 1;j <= flag; j++) { if(a[i] > b[j-1] && a[i] < b[j]) { b[j] = a[i] ; break; } } } /*for(int j = 0; j <= flag; j++) cout<<b[j]<<' '; cout<<endl;*/ } cout<<flag<<endl; }
51nod 1134 最长递增子序列
猜你喜欢
转载自blog.csdn.net/Zeolim/article/details/79988606
今日推荐
周排行