2 条题解
-
1
#include<bits/stdc++.h> using namespace std; const int N=1e6+520; int t,x,y,n,dp[N],maxx,a[N]; int main(){ cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++){ dp[i]=1; for(int j=1;j<i;j++) if(a[i]<a[j]) dp[i]=max(dp[i],dp[j]+1); maxx=max(maxx,dp[i]); } for(int i=n;i>=1;i--){ dp[i]=1; for(int j=n;j>i;j--){ if(a[i]<a[j]) dp[i]=max(dp[i],dp[j]+1); } maxx=max(dp[i],maxx); } cout<<maxx<<endl; maxx=0; } return 0; } //唯一
-
-1
#include<bits/stdc++.h> using namespace std; const int N=1e2+10; int t,n,dp[N],len,a[N]; void Memset() { memset(dp,0,sizeof(0)); len=0; } int main() { scanf("%d",&t); while(t--) { int ans=0; scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",&a[i]); } Memset(); dp[++len]=a[1]; for(int i=2;i<=n;++i) { if(a[i]<dp[len]) { dp[++len]=a[i]; } else { int upd=lower_bound(dp+1,dp+len+1,a[i],greater<int>())-dp; dp[upd]=a[i]; } } ans=max(ans,len); Memset(); dp[++len]=a[n]; for(int i=n-1;i>=1;--i) { if(a[i]<dp[len]) { dp[++len]=a[i]; } else { int upd=lower_bound(dp+1,dp+len+1,a[i],greater<int>())-dp; dp[upd]=a[i]; } } ans=max(ans,len); printf("%d\n",ans); } return 0; }
- 1
信息
- ID
- 3120
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 198
- 已通过
- 59
- 上传者