51nod 1107 斜率小于0的连线数量

来源:互联网 发布:unity3d unreal4 比较 编辑:程序博客网 时间:2024/05/21 17:56

将点按横坐标x排序,然后提取纵坐标y,求逆序数对即可。

#include <bits/stdc++.h>using namespace std;const int MAXN=50050;struct node{int x,y;}nod[MAXN];bool cmp(node n1,node n2){if(n1.x!=n2.x)return n1.x<n2.x;return n1.y<n2.y;}int a[MAXN];long long ans;void merge(int lef,int rig){if(lef==rig)return;if(lef==rig-1){if(a[lef]>a[rig])ans++;return;}int mid,i;mid=(lef+rig)>>1;merge(lef,mid);merge(mid+1,rig);sort(a+mid+1,a+rig+1);for(i=lef;i<=mid;i++)ans+=lower_bound(a+mid+1,a+rig+1,a[i])-(a+mid+1);}int main(){int i,n;while(cin>>n){for(i=0;i<n;i++)scanf("%d%d",&nod[i].x,&nod[i].y);sort(nod,nod+n,cmp);for(i=0;i<n;i++)a[i]=nod[i].y;ans=0;merge(0,n-1);printf("%lld\n",ans);}}


0 0
原创粉丝点击