3 条题解
-
0
-
0
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n, a[N], bn, b[N], f[N], c[N]; void upd(int x, int k){for(;x>=1;x-=x&-x)c[x]=max(c[x],k);} int ask(int x) { int res=0; for(;x<=bn;x+=x&-x)res=max(res,c[x]); return res; } int main() { scanf("%d", &n); for(int i=1;i<=n;i++)scanf("%d", &a[i]), b[i]=a[i]; sort(b+1, b+n+1); bn=unique(b+1, b+n+1)-b-1; for(int i=1;i<=n;i++)a[i]=lower_bound(b+1, b+bn+1, a[i])-b; memset(c,0,sizeof(c)); for(int i=n;i>=1;i--) { f[i]=ask(a[i]+1)+1; upd(a[i], f[i]); } int maxlen=ask(1); int m;scanf("%d", &m); while(m--) { int l;scanf("%d", &l); if(l>maxlen){puts("Impossible");continue;} for(int i=1, j=1, pre=0;i<=l;i++) { for(;j<=n;j++)if(f[j]>=l-i+1 && a[j]>pre )break; printf("%d ", b[pre=a[j++]]); } printf("\n"); } return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n,a[N],bn,b[N],f[N],c[N]; void upd(int x,int k){for(;x>=1;x-=x&-x)c[x]=max(c[x],k);} int ask(int x) { int res=0; for(;x<=bn;x+=x&-x)res=max(res,c[x]); return res; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]),b[i]=a[i]; sort(b+1,b+n+1); bn=unique(b+1,b+n+1)-b-1; for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+bn+1,a[i])-b; memset(c,0,sizeof(c)); for(int i=n;i>=1;i--) { f[i]=ask(a[i]+1)+1; upd(a[i],f[i]); } int maxlen=ask(1); int m;scanf("%d",&m); while(m--) { int l;scanf("%d",&l); if(l>maxlen){puts("Impossible");continue;} for(int i=1,j=1,pre=0;i<=l;i++) { for(;j<=n;j++)if(f[j]>=l-i+1 && a[j]>pre )break; printf("%d ",b[pre=a[j++]]); } printf("\n"); } return 0; }
- 1
信息
- ID
- 2699
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 6
- 标签
- 递交数
- 61
- 已通过
- 18
- 上传者