记录编号 |
260661 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2007]上升序列 |
最终得分 |
100 |
用户昵称 |
神利·代目 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.943 s |
提交时间 |
2016-05-14 10:00:20 |
内存使用 |
0.29 MiB |
显示代码纯文本
/*
注意:这里的字典序不是指数字大小 而是指数字在原数组中出现的位置
所以。。。所以就水了啊!!!
*/
#include<cstdio>
int i,n,l,r,mid,last,a[10001],q[10001],f[10001];
bool work(){
freopen("lis.in","r",stdin);
freopen("lis.out","w",stdout);
scanf("%d",&n);
for(f[n]=q[0]=i=1;i<=n;++i)
scanf("%d",&a[i]);
for(q[1]=a[--i];--i;){
if(a[i]<q[q[0]])q[f[i]=++q[0]]=a[i];
else{
for(l=1,r=q[0];l<r;){
mid=l+r>>1;
if(q[mid]>a[i])l=mid+1;
else r=mid;
}
q[l]=a[i],f[i]=l;
}
}
for(scanf("%d",&i);i--;){
scanf("%d",&l);
if(l>q[0])puts("Impossible");
else{
last=-1;
for(int j=1;j<=n;++j){
if(f[j]>=l&&a[j]>last){
if(l==1){
printf("%d",a[j]);
break;
}
printf("%d ",a[j]);
last=a[j],--l;
}
}
puts("");
}
}
}
bool tt=work();
main(){;}