首页 > 代码库 > 51nod 1134 最长递增子序列
51nod 1134 最长递增子序列
题目链接:51nod 1134 最长递增子序列
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int N = 50001; 6 int a[N]; 7 int b[N]; 8 int Search(int num, int low, int high){ 9 int mid; 10 while(low <= high){ 11 mid = (low + high)/2; 12 if(num >= b[mid]) low = mid + 1; 13 else high = mid - 1; 14 } 15 return low; 16 } 17 int DP(int n){ 18 int i, len, pos; 19 b[1] = a[1]; 20 len = 1; 21 for(i = 2; i <= n; i++){ 22 if(a[i] >= b[len]) 23 b[++len] = a[i]; 24 else{ 25 pos = Search(a[i],1,len); 26 //在b[]数组中找出第一个比a[i]大的位置并且让a[i]替代这个位置 27 b[pos] = a[i]; 28 } 29 } 30 return len; 31 } 32 int main(){ 33 int n, i, j; 34 scanf("%d", &n); 35 for(i = 1; i <= n; ++i) 36 scanf("%d", &a[i]); 37 int len = DP(n); 38 printf("%d\n", len); 39 return 0; 40 }
51nod 1134 最长递增子序列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。