d[i]以第i个数开头能产生的最长的LIS的长度
对于有解的情形 设要求的长度为len
第i个数就是从第i-1往后找到第一个d[i]>=len - i + 1且a[i] > a[i-1]
const int N = 10010;
int Data[N], n, m;
int Dp[N], MaxLen;
inline void Input() {
scanf("%d", &n);
For(i, 1, n) scanf("%d", &Data[i]);
}
inline int PutIn(int Val) {
static int T[N];
int Ret = 0;
if(!MaxLen || (MaxLen && Val < T[MaxLen])) T[Ret = ++MaxLen] = Val;
else {
int Lef = 1, Rig = MaxLen, Mid;
while(Lef <= Rig) {
Mid = (Lef + Rig) >> 1;
if(T[Mid] <= Val) Rig = (Ret = Mid) - 1;
else Lef = Mid + 1;
}
T[Ret] = Val;
}
return Ret;
}
inline void Solve(int Len);
inline void Solve() {
MaxLen = 0;
Ford(i, n, 1) Dp[i] = PutIn(Data[i]);
for(scanf("%d", &m); m--;) {
int X;
scanf("%d", &X);
if(X > MaxLen) puts("Impossible");
else Solve(X);
}
}
int main() {
#ifndef ONLINE_JUDGE
SETIO("1046");
#endif
Input();
Solve();
return 0;
}
inline void Solve(int Len) {
int Cnt = -MIT;
For(i, 1, n)
if(Dp[i] >= Len && Data[i] > Cnt) {
printf("%d", Cnt = Data[i]);
printf(Len > 1 ? " " : "\n");
if(!(--Len)) break;
}
}