P2215 [HAOI2007]上升序列
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,a[10005];
vector<int> res[10005];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>m;
int t[10005]={},p=0,big=0;
t[0]=-1e9;res[1].push_back(a[1]);
for(int i=1;i<=n;i++){
if(!p){
t[++p]=a[i];big=max(big,p);
}else{
if(a[i]>t[big]){
t[++big]=a[i];
for(int j=1;j<=big;j++){
res[big].push_back(t[j]);
}
}else{
while(a[i]<=t[p]){
p--;
}
t[++p]=a[i];
big=max(big,p);
}
}
}
while(m--){
cin>>k;
if(k>big){
cout<<"Impossible"<<endl;
}else{
for(int i=0;i<k;i++){
cout<<res[k][i]<<' ';
}cout<<endl;
}
}
return 0;
}