题目大意:就是求最长的上升子序列,输出长度。
思路:LIS水题。就是题目描述的特别长。
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 int a[40005]; 7 int dp[40005]; 8 int mx[40005]; 9 int INF=9999999;10 int main(){11 int T;12 cin>>T;13 while(T--){14 int n;15 cin>>n;16 for(int i=1;i<=n;i++)17 scanf("%d",&a[i]);18 for(int i=0;i<=40003;i++)19 mx[i]=INF;20 mx[0]=0;21 int len=0;22 for(int i=1;i<=n;i++){23 for(int j=len;j>=0;j--){24 if(a[i]>mx[j]){25 dp[i]=j+1;26 mx[j+1]=min(a[i],mx[j+1]);27 break;28 }29 }30 len=max(len,dp[i]);31 }32 cout< <