正题
题目大意
序列AAA和序列BBB。一个子集SSS使得不存在
Ax≥Ay&Bx≤By(x,y∈S)A_x\geq A_y\ \&\ B_x\leq B_y(x,y\in S)Ax≥Ay & Bx≤By(x,y∈S)
求子集最大大小
解题思路
很显然我们可以先排序然后变成LISLISLIS问题。
先按照AAA为第一关键字降序排序,然后按照BBB为第二关键字升序排序。然后按照BBB求最长上升子序列即可。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct node{int a,b;
}c[N];
int n,tail,q[N];
bool cmp(node x,node y)
{return (x.a==y.a)?x.b>y.b:x.a<y.a;}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d%d",&c[i].a,&c[i].b);sort(c+1,c+1+n,cmp);memset(q,0x3f,sizeof(q));q[0]=0;for(int i=1;i<=n;i++){int num=c[i].b;if(num>q[tail])q[++tail]=num;else{int loc=lower_bound(q+1,q+1+tail,num)-q;q[loc]=num;}}printf("%d",tail);
}