标签:
Description
Input
Output
Sample Input
Sample Output
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 #define maxn 100000+10 5 int al[maxn], cl[maxn]; 6 int main() 7 { 8 int n,len,left,right,mid; 9 while (scanf("%d",&n)!= EOF){ 10 for (int i = 0; i < n; i++) 11 scanf("%d", &al[i]); 12 len = 0, cl[0] = -1; 13 for (int i = 0; i < n; i++) 14 { 15 if (al[i]>cl[len]) 16 cl[++len] = al[i]; //把大的数放进去 17 else 18 { 19 left = 1, right = len; //二分法找后面小的数放在这个子序列的前面,以免有更长的子序列 20 21 while (left <= right) 22 { 23 mid = (left + right) / 2; 24 if (al[i]>cl[mid]) 25 left = mid + 1; 26 else 27 right = mid - 1; 28 } 29 cl[left] = al[i]; 30 } 31 } 32 printf("%d\n", len); 33 } 34 35 return 0; 36 }
标签:
原文地址:http://www.cnblogs.com/Lynn0814/p/4726667.html