51nod 1107 逆序对
来源:互联网 发布:windows api 窗口置顶 编辑:程序博客网 时间:2024/04/27 15:34
给你一些点,叫你求斜率小0的直线的条数。
现将点按着x从小到大排好,x一样的话按y从小到大排好。求逆序。即可
#include<bits/stdc++.h>using namespace std;typedef long long LL;#define MOD 1000000007#define PI acos(-1.0)#define INF 0x3f3f3f3fconst int maxn=500005;struct point{ int x,y;}P[maxn];int a[maxn],T[maxn];int n;LL cnt;bool cmp(point t1,point t2){ if(t1.x==t2.x)return t1.y<t2.y; return t1.x<t2.x;}void merge_sort(int *A,int x,int y,int *T){ if(y-x>1){ int m=(x+y)>>1; int p=x,q=m,i=x; merge_sort(A,x,m,T); merge_sort(A,m,y,T); while(p<m||q<y){ if(q>=y||(p<m&&A[p]<=a[q]))T[i++]=A[p++]; else {T[i++]=A[q++];cnt+=m-p;}//求逆序 cnt+=m-p,求正序 cnt+=y-q } for(int i=x;i<y;i++)A[i]=T[i]; }}int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d%d",&P[i].x,&P[i].y); } sort(P,P+n,cmp); for(int i=0;i<n;i++){ a[i]=P[i].y; } cnt=0; merge_sort(a,0,n,T); printf("%lld\n",cnt); return 0;}
0 0
- 51nod 1107 逆序对
- 51Nod-1779-逆序对统计
- 51Nod 1874 字符串排序 逆序对
- 【51 nod 1019 】 逆序对 【归并排序】or【线段树】
- 51nod 1779 逆序对统计 [状压dp]
- 【51nod】1779 逆序对统计 状压DP
- 【51Nod】1779 逆序对统计 状压DP
- 【状压DP】51Nod 1779 逆序对统计
- 51nod 1779 逆序对统计【状压DP】
- 51Nod 逆序数
- 51nod逆序数
- 逆序数 51Nod
- 逆序数 51Nod
- 51nod 1019 逆序数
- 51NOD 1020 逆序排列
- 51nod 1019 逆序数
- [51nod]1019 逆序数
- 51NOD-归并-逆序数
- Miller Rabin
- hibernate 缓存机制详细分析
- 数据流中的中位数
- 白帽、灰帽和黑帽
- C++ 处理输入包含特定信息的字符串
- 51nod 1107 逆序对
- 【struts2】Action的实现
- 大话数据结构读书笔记 3---串
- 程序是如何执行的(三)函数调用
- gem install安装报SSL证书错误的解决办法
- 逆序建立链表
- 算法导论第六章-堆排序c++
- 线段树扫描线hdu1828Picture
- 傅里叶变换的简单理解