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