题意:

日本西海岸有n座城市,东海岸m座城市。现在要在两个海岸的城市之间建高速公路,问有几个相交点。

要点:

对Ax,Ay和Bx,By两条高速公路,有相交点必须(Ax-Bx)*(Ay-By)<0,所以我们只要先按照x从小到大排序,然后再求y中的逆序对即可。因为同一个城市是不算的如:3,1和3,2不相交。所以x排序时只要相同的把y较小的放到前面即可,这样后面求逆序对时就不会算了。这题有个比较坑的地方是数据其实是1E6的,所以一定要用long long。

归并排序模板:

void merge_sort(int a[],int x,int y,int t[])//注意这里[x,y),y是取不到的
{if (y - x > 1){int m = x + (y - x) / 2;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++];//从左半区间复制到临时区间elset[i++] = a[q++];//相反,从右半区间复制到临时空间}for (i = x; i < y; i++)a[i] = t[i];       //从临时空间复制回a数组}
}
15357610 Seasonal 3067 Accepted 5360K 563MS C++ 1128B 2016-04-05 22:06:43
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#define maxn 1000050
using namespace std;
struct node
{int x, y;
}a[maxn];
long long cnt;      //注意这里其实数据是1E6,所以用long long
int c[maxn],b[maxn];bool cmp(const node &a, const node &b)
{if (a.x == b.x) return a.y < b.y;//相同的按y从小到大,这样后面逆序对不会计算进去else return a.x < b.x;
}
void merge_sort(int a[], int x, int y, int t[])//注意这里[x,y),y是取不到的
{if (y - x > 1){int m = x + (y - x) / 2;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;  //这里只要加上左区间中剩下的个数就是逆序对}}for (i = x; i < y; i++)a[i] = t[i];      //从临时空间复制回a数组}
}int main()
{int t;scanf("%d", &t);for (int j = 1; j <= t;j++){int  n, m, k;scanf("%d%d%d", &n, &m, &k);for (int i = 0; i < k;i++){scanf("%d%d", &a[i].x, &a[i].y);}sort(a, a + k, cmp);for (int i = 0; i < k; i++)c[i] = a[i].y;cnt = 0;merge_sort(c, 0, k, b);printf("Test case %d: %lld\n",j,cnt);}return 0;
}

转载于:https://www.cnblogs.com/seasonal/p/10343793.html

POJ3067 Japan(归并排序)相关推荐

  1. POJ-3067 Japan(树状数组、线段树)

    题目链接 Description Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built f ...

  2. POJ3067 Japan

    题目链接:http://poj.org/problem?id=3067 求交叉数,先按第一列排序,再对第二列求逆序对 注意会爆int 注意==和=,一不留神写错还没看出来 贴代码 #include&l ...

  3. Japan POJ3067

    Japan   POJ3067 题目:有2个竖下来的点,给出许多连线,问有多少交叉, 思路:连线按左端点a从小到大排序,每次都查询右端点b的后缀和即可(画个图理解) 代码: #include<i ...

  4. 分治算法的设计思想(二分检索、二分归并排序)

    分治策略思想: 将原问题划分或者归结为规模较小的子问题. 递归或迭代求解每一个问题. 将子问题的解综合得到原问题的解. 性质: 子问题与原问题具有相同的性质. 子问题的求解彼此独立. 划分时子问题的规 ...

  5. LightHouse/归并排序

    灯塔(LightHouse) 题目见https://dsa.cs.tsinghua.edu.cn/oj/problem.shtml?id=1144 最近复习DSA,便在看邓老师的mooc,顺便做做配套 ...

  6. 归并排序(代码注释超详细)

    归并排序: (复制粘贴百度百科没什么意思),简单来说,就是对数组进行分组,然后分组进行排序,排序完最后再整合起来排序! 我看了很多博客,都是写的8个数据呀什么的(2^4,分组方便),我就想着,要是10 ...

  7. 递归/分治:归并排序

    前言 分治算法: 将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出 子问题的解后进行合并,就可得到原问题的解. 步骤如下: 分解,将要解决的问题划分成若 干规 ...

  8. C语言 带比较器的归并排序

    1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int DataType; 5 6 //比较器 7 int myc ...

  9. (C++)归并排序的递归与非递归实现

    递归实现 merge函数利用的是双指针技巧降低复杂度. mergeSort函数使用了递归,当中先对左右序列各调用一次mergeSort,再对整个序列调用merge.就按照最浅层的归并的思想去理解,不要 ...

最新文章

  1. 加州大学戴维斯分校 计算机科学,加州大学戴维斯分校的计算机专业如何?
  2. 45个优秀的国外电子商务网站设计实例
  3. kubectl bash补全
  4. JS日期函数getMonth()的值域是0--11
  5. Django从理论到实战(part47)--ListView类
  6. mysql 5.7 my.cnf 为空_mysql 5.7 的 /etc/my.cnf
  7. SpringBoot时间戳与MySql数据库记录相差14小时排错
  8. [vue] v-once的使用场景有哪些?
  9. 02函数-03-闭包
  10. C++安全方向(三)3.3 openssl的MD5接口调用演示
  11. mysql 11.2.16_Navicat for MySQL 11.2
  12. UVA216 UVALive5155 Getting in Line【全排列+回溯】
  13. PoostgreSQL在Windows平台安装失败的解决
  14. docker 进入停止的容器_在Docker中运行一个Ubuntu镜像
  15. JAVA转为wasm/JavaScript,可以考虑CheerpJ
  16. 概率机器人-贝叶斯滤波
  17. 基于python下django框架 实现校园二手书籍交易系统详细设计
  18. python新浪微博爬虫_利用新浪API实现数据的抓取\微博数据爬取\微博爬虫
  19. Word 2003的基本使用
  20. 市场调查有什么好的选题推荐么?

热门文章

  1. python如何对文件进行批量命名-利用Python对文件批量重命名
  2. 编辑器图片上传 linux,summernote 富文本编辑器上传本地图片
  3. 树莓派linux系统识别u盘启动,使用U-Boot让树莓派从U盘启动
  4. php面试 算法,PHP面试之常用算法 - 简庆旺个人博客|PHP教程|PHP学习|Python学习|Python教程|Seo学习|Seo教程...
  5. linux c绑定cpu_Linux内核路径优化之多核心平台TCP优化
  6. Looking Back 2018
  7. 写给考完SDOI2016R2D1的自己
  8. Must、should、have to、can 和 need to的否定句_56
  9. 《深入理解计算机系统》CSAPP
  10. Martin Odersky Scala编程公开课 第二周作业