#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++]=a[i].y;
else
{
t=-1;
int L=0,R=top-1;
while(L<=R)
{
int mid=(L+R)/2;
if(stack[mid]<=a[i].y)
{
t=mid;
R=mid-1;
}
else L=mid+1;
}
if(t<0)
stack[top++]=a[i].y;
else
stack[t]=a[i].y;
}
}
printf("%d\n",top);
}
}
zoj2283净遇到一些玄学bug,只能按上面代码来了
if(t<0)
stack[top++]=a[i].y;
else
stack[t]=a[i].y;
经无数次检测,不能用stack[top]>a[i].y去代替,很玄学,莫名的玄学
从下到上是由大到小,因此二分的时候注意一下