题意:别问我,直接扒1065或者1548代码,然后改一下cmp函数为y值递减,然后最长下降子序列改成最长不上升子序列,收工。
贴代码:(当然你要看这个定理可以去我的前两篇博客看)
啊,这个的求最长不上升子序列必须nlogn了,n^2会TLE了~~
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 50000
#define inf 0x3f3f3f3f
using namespace std;
struct KSD
{
int x,y;
bool operator < (const KSD &a)const
{if(x==a.x)return y>a.y;return x<a.x;}
}s[N];
int n,f[N];
int main()
{
// freopen("test.in","r",stdin);
int i,g;
scanf("%d",&g);
while(g--)
{
memset(f,0,sizeof(f));
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d%d",&s[i].x,&s[i].y);
sort(s+1,s+n+1);
int l,r,mid,num=1;
f[1]=inf;
for(i=1;i<=n;++i)
{
l=1,r=num;
while(l<r)
{
mid=(l+r+1)>>1;
if(f[mid]<s[i].y)r=mid-1;else l=mid;
}
f[l+1]=max(f[l+1],s[i].y);
if(l==num)++num;
}
printf("%d\n",num-1);
}
return 0;
}