1 solutions
-
0
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