记录编号 | 440713 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [HAOI 2007]上升序列 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 2.472 s | ||
提交时间 | 2017-08-23 20:59:36 | 内存使用 | 0.47 MiB | ||
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int inf =10005; int n,m,a[inf],b[inf],g[inf],h[inf],tail; int main() { freopen("lis.in","r",stdin); freopen("lis.out","w",stdout); // freopen("1.txt","r",stdin); scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } memset(b,0x3f,sizeof(b)); for(int i=n;i>=1;i--){ if(a[i]<=b[tail]){ b[++tail]=a[i]; g[i]=tail; } else{ int l=1,r=tail; while(l!=r){ int mid=(l+r)>>1; if(b[mid]>a[i]){ l=mid+1; } else r=mid; } b[l]=a[i]; g[i]=l; } } scanf("%d",&m); for(int i=1;i<=m;i++){ int x; scanf("%d",&x); if(x>tail){ cout<<"Impossible"<<endl<<endl; } else{ memset(h,0,sizeof(h)); int o=0,last=0; for(int i=1;x;i++){ if(g[i]>=x&&a[i]>a[last]){ last=i; x--; h[++o]=a[i]; } } for(int i=1;h[i];i++){ cout<<h[i]<<" "; } cout<<endl<<endl; } } return 0; }