1 solutions

  • 0
    @ 2025-11-5 17:34:00

    C++ :

    #include<cstdio>
    
    using namespace std;
    
    int f[10100];
    int pre[10010],max,c[10010];
    int n,m,l,a[10100],b[10010],ans;
    
    int main()
    {
    	scanf("%d",&n);for(int i=1;i<=n;i++)f[i]=1;
    	for(int i=1;i<=n;i++)scanf("%d",&a[i]);a[0]=0x7fffffff;
    	for(int i=n;i>=1;i--)
    	    for(int j=i+1;j<=n;j++)
    	    {
    			if(a[i]<a[j]&&f[j]+1>=f[i]){
    				if(f[j]+1>f[i]){
    					f[i]=f[j]+1;pre[i]=j;
    				}
    				else if(pre[i]>j)pre[i]=j;
    			}
    	    }
    	for(int i=1;i<=n;i++)c[i]=100000;
    	for(int i=1;i<=n;i++){
    		if(ans<f[i])ans=f[i];
    		for(int j=1;j<=f[i];j++)
    		    if(c[j]>i)c[j]=i;
    	}
    	scanf("%d",&m);
    	for(int i=1,j;i<=m;i++){
    		scanf("%d",&l);
    		if(l>ans)
    		{
    			if(i!=m)printf("Impossible\n");
    			else printf("Impossible");
    		}
    		else{
    			j=c[l];
    			while(l>0){
    				if(l>1)printf("%d ",a[j]);
    				else printf("%d",a[j]);l--;
    				for(int k=j+1;k<=n;k++)
    				    if(f[k]>=l&&a[k]>a[j]){
    						j=k;break;
    				    }
    			}if(i<m)printf("\n");
    		}
    	}
    }
    
    
    • 1

    Information

    ID
    18556
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By