题目:
求LIS即可,我使用了树状数组。
代码如下:
#include#include #include 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;}