#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn = 211111;
int y[maxn];
int stack[maxn];
struct node
{
int x;
int y;
} a[100009];
int cmp(node a,node b)
{
if(a.x==b.x) return a.y<b.y;
else return a.x<b.x;
}
int binary(int l,int r,int k)
{
int ans=-1,m;
while(l<=r)
{
m=(l+r)/2;
if(k>=stack[m])
ans=m,r=m-1;
else
l=m+1;
}
return ans;
}
int main()
{
int n,m,P,i;
while(~scanf("%d%d%d",&n,&m,&P))
{
for(i=0; i<P; ++i)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
sort(a,a+P,cmp);
int l,top,t;
l=top=0;
stack[0]=999999;
for(i=0; i<P; i++)
{
if(l==top)
stack[top+
最长上升子序列zoj2283,最小链划分=最长反链
最新推荐文章于 2024-05-25 12:11:52 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)