依旧LIS
不过4Y
以后while(gets(S)!=NULL)要这样写=.=
#include<stdio.h>
#include<vector>
#define SMAX 1000010
#include<algorithm>
int n,a[SMAX];
int dp[SMAX];
int ok[SMAX];
std::vector<int>f;
std::vector<int>::iterator pf;
int max(int a,int b){
if(a>b)return a;return b;
}
int main(){
// freopen("in.txt","r",stdin);
// freopen("o.txt","w",stdout);
int t,i;
scanf("%d%*c%*c",&t);
while(t--){
char s[100];
n=0;f.clear();
while(gets(s)!=NULL){
if(s[0]=='\0')break;
sscanf(s,"%d",&a[++n]);
}
// printf("test:%d\n",t);
// for(i=1;i<=n;i++)printf("%d ",a[i]);printf("\n");
dp[1]=1;f.push_back(a[1]);
for(i=2;i<=n;i++){
pf = lower_bound( f.begin(), f.end(), a[i] );
int k=pf-f.begin();
if(pf==f.end()){
f.push_back(a[i]);
dp[i]=f.size();
}
else {
*pf=a[i];
dp[i]=k+1;
}
}
int res=0;
for(i=1;i<=n;i++)res=max(dp[i],res);
int pes=1;
for(i=1;i<=n;i++)if(dp[i]==res)pes=i;
printf("Max hits: %d\n",res);
for(i=1;i<=n;i++)ok[i]=0;
ok[pes]=1;
for(i=pes-1;i>=1;i--){
if(dp[i]==res-1&&a[i]<a[pes]){
pes=i;
ok[pes]=1;
res--;
}
}
for(i=1;i<=n;i++)if(ok[i])printf("%d\n",a[i]);
if(t!=0)printf("\n");
}
// return main();
return 0;
}