wenbao与最大上升子序列
一
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int N=1e4; 5 int a[N],d[N]; 6 7 int main(){ 8 int n; 9 while(cin>>n){ 10 for(int i=0; i<n; i++) cin>>a[i]; 11 int ma=0; 12 for (int i = 0; i < n; i++){ 13 d[i] = 1; 14 for (int j = 0; j <= i - 1; j++){ 15 if (a[j] < a[i] && d[i] < d[j] + 1){ 16 d[i] = d[j] + 1; 17 } 18 } 19 ma=max(ma,d[i]); 20 } 21 printf("%d\n",ma); 22 } 23 return 0; 24 }
二(复杂度低,推荐使用!!!!!!!!!!!!!)
1 #include <iostream> 2 using namespace std; 3 4 const int N=1e5; 5 int a[N],d[N]; 6 7 int main(){ 8 int n; 9 while(cin>>n){ 10 for(int i=0; i<n; i++) cin>>a[i]; 11 int init=1; 12 d[1]=a[0]; 13 for(int i=1; i<n; i++){ 14 if(a[i]>d[init]) d[++init]=a[i]; 15 else{ 16 //int pos=sear(0,init,a[i]); 17 int pos=lower_bound(d,d+init,a[i])-d; 18 d[pos]=a[i]; 19 } 20 cout<<init<<endl; 21 } 22 } 23 return 0; 24 }
只有不断学习才能进步!