2 条题解

  • 1
    @ 2025-7-31 11:22:27
    #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
      @ 2024-7-14 16:09:41
      #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
      上传者