又是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; }