奶牛的交叉路
有两列数,有许多线把它们连起来,求有多少没有交叉的线
输入
样例输入
4
-3 4
7 8
10 16
3 9
输出
样例输出
2
样例解释
左右两边的数字是有序的
第二条与第四条线交叉了
而第一条与第三条没有和其他任何一条线交叉
所以输出
2
2
2
思路
先对 y y y排序,然后记录位置,再对 x x x进行排序,然后询问每一条线是否在原来的位置上
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
struct whw
{
int x,y,k;
}a[300025];
int n,ans,maxx;
bool Whw(whw i,whw j)//对x进行排序
{return i.x<j.x;}
bool whW(whw i,whw j)//对y进行排序
{return i.y<j.y;}
int main()
{
freopen("crossings.in","r",stdin) ;
freopen("crossings.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+n+1,whW);//对y进行排序
for(int i=1;i<=n;++i)//记录位置
a[i].k=i;
sort(a+1,a+n+1,Whw);//对x进行排序
for(int i=1;i<=n;++i)
{
if(a[i].k==i && maxx==i-1)ans++;//询问是否在当前位置上
maxx=max(maxx,a[i].k);
}
printf("%d",ans);
fclose(stdin);
fclose(stdout);
return 0;
}