题目:http://poj.org/problem?id=1631
求LIS即可,我使用了树状数组。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,p,a[40005],f[40005]; int query(int x) { int ret=0; for(;x;x-=x&-x) ret=max(ret,f[x]); return ret; } void update(int x,int k) { for(;x<=p;x+=x&-x) f[x]=max(f[x],k); } int main() { scanf("%d",&n); while(n--) { scanf("%d",&p); memset(f,0,sizeof f); for(int i=1;i<=p;i++) { scanf("%d",&a[i]); int k=query(a[i]); update(a[i],k+1); } printf("%d\n",query(p)); } return 0; }