记录编号 260661 评测结果 AAAAAAAAAA
题目名称 [HAOI 2007]上升序列 最终得分 100
用户昵称 Gravatar神利·代目 是否通过 通过
代码语言 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(){;}