又是LIS,又没看出来,写了一个O(n2),用滚动数组优化的算法,超时,瞥了一眼discuss看到了LIS这个字眼,一想,还果然可转化为LIS,而且还这么明显,居然没看出来
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=40000+10;
const int inf=200000000;
int num[maxn];
int f[maxn],d[maxn];
int main()
{
int n,p;
scanf("%d",&n);
while(n--)
{
scanf("%d",&p);
int i;
for(i=1;i<=p;i++)
{
scanf("%d",&num[i]);
f[i]=inf;
}
int max=-1;
for(i=1;i<=p;i++)
{
int k=lower_bound(f+1,f+p+1,num[i])-f;
d[i]=k;
f[k]=num[i];
if(d[i]>max) max=d[i];
}
printf("%d\n",max);
}
return 0;
}