首页 > 代码库 > hdu 1950 最长上升子序列
hdu 1950 最长上升子序列
1 //Accepted 3540 KB 62 ms 2 //dp 最长上升子序列 3 #include <cstdio> 4 #include <cstring> 5 #include <iostream> 6 using namespace std; 7 const int imax_n = 400005; 8 int dp[imax_n]; 9 int d[imax_n];10 int a[imax_n];11 int n;12 int len;13 int max(int a,int b)14 {15 return a>b?a:b;16 }17 int binary_search(int k)18 {19 int l=0;20 int r=len;21 while (l<=r)22 {23 int mid=(l+r)/2;24 if (d[mid]==k) return mid;25 if (d[mid]<k) l=mid+1;26 if (d[mid]>k) r=mid-1;27 }28 return l;29 }30 void Dp()31 {32 memset(dp,0,sizeof(dp));33 memset(d,0,sizeof(d));34 len=-1;35 for (int i=0;i<n;i++)36 {37 int j=binary_search(a[i]);38 if (j>len) len++;39 dp[i]=j+1;40 d[j]=a[i];41 }42 int ans=0;43 for (int i=0;i<n;i++)44 ans=max(ans,dp[i]);45 printf("%d\n",ans);46 }47 int main()48 {49 int T;50 scanf("%d",&T);51 while (T--)52 {53 scanf("%d",&n);54 for (int i=0;i<n;i++)55 scanf("%d",&a[i]);56 Dp();57 }58 return 0;59 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。