记录编号 54169 评测结果 AAAAAAAAAA
题目名称 [HAOI 2007]上升序列 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 2.287 s
提交时间 2013-03-08 19:33:45 内存使用 0.39 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
const int NSIZE=10010;
int n;
int f[NSIZE]={0};
int a[NSIZE]={0};
void DP(void){
	f[n]=1;
	int i,j;
	for(i=n-1;i>=1;i--){
		f[i]=1;
		for(j=i+1;j<=n;j++){
			if(a[j]>a[i]&&f[j]+1>f[i]){
				f[i]=f[j]+1;
			}
		}
	}
}
void work(void){
	int l;
	scanf("%d",&l);
	int i,j,sum,now;
	for(i=1;i<=n;i++){
		if(f[i]<l) continue;
		j=i,now=a[i];
		for(sum=1;sum<=l;sum++){
			printf("%d ",a[j]);
			do{
				j++;
			}while((a[j]<=now||f[j]<l-sum)&&j<n);
			now=a[j];
		}
		printf("\n");
		return;
	}
	printf("Impossible\n");
}
int main(){
	freopen("lis.in","r",stdin);
	freopen("lis.out","w",stdout);
	scanf("%d",&n);
	int i;
	for(i=1;i<=n;i++) scanf("%d",&a[i]);
	DP();
	int m;
	scanf("%d",&m);
	for(i=1;i<=m;i++) work();
	return 0;
}