#1305 : 区间求差

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定两个区间集合 A 和 B,其中集合 A 包含 N 个区间[ A1A2 ], [ A3A4 ], ..., [ A2N-1A2N ],集合 B 包含 M 个区间[ B1B2 ], [ B3B4 ], ..., [ B2M-1B2M ]。求 A - B 的长度。

例如对于 A = {[2, 5], [4, 10], [14, 18]}, B = {[1, 3], [8, 15]}, A - B = {(3, 8), (15, 18]},长度为8。

输入

第一行:包含两个整数 N 和 M (1 ≤ NM ≤ 100000)。

第二行:包含 2N 个整数 A1A2, ..., A2N (1 ≤ Ai ≤ 100000000)。

第三行:包含 2M 个整数 B1B2, ..., B2M (1 ≤= Bi ≤ 100000000)。

输出

一个整数,代表 A - B 的长度。

样例输入
  1. 3 2
  2. 2 5 4 10 14 18
  3. 1 3 8 15
样例输出
  1. 8
  2.  
  3. 题目连接:http://hihocoder.com/problemset/problem/1305

  1. 题意:A-B区间求差集
    思路:ab本身区间去重。相对来说,交集容易求出来。差集=本身-交集。
    代码:
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int MAXN=1e6+;
  7. struct node
  8. {
  9. int l,r;
  10. } a[MAXN],b[MAXN],va[MAXN],vb[MAXN];
  11. int cmp(node x,node y)
  12. {
  13. return x.l<y.l;
  14. }
  15. void change(int *x,int *y)
  16. {
  17. int sign=*x;
  18. *x=*y;
  19. *y=sign;
  20. }
  21. int removal(node *a,int n,node *va)
  22. {
  23. int i,j;
  24. va[].r=;
  25. for(i=,j=; i<=n; i++)
  26. {
  27. if(a[i].l<=va[j].r)
  28. va[j].r=max(va[j].r,a[i].r);
  29. else
  30. {
  31. j++;
  32. va[j].l=a[i].l;
  33. va[j].r=a[i].r;
  34. }
  35. }
  36. return j;
  37. }
  38. int main()
  39. {
  40. int n,m;
  41. while(~scanf("%d%d",&n,&m))
  42. {
  43. for(int i=; i<=n; i++)
  44. {
  45. scanf("%d%d",&a[i].l,&a[i].r);
  46. if(a[i].l>a[i].r) change(&a[i].l,&a[i].r);
  47. }
  48. for(int i=; i<=m; i++)
  49. {
  50. scanf("%d%d",&b[i].l,&b[i].r);
  51. if(b[i].l>b[i].r) change(&b[i].l,&b[i].r);
  52. }
  53. sort(a+,a+n+,cmp);
  54. sort(b+,b+m+,cmp);
  55. memset(va,,sizeof(va));
  56. memset(va,,sizeof(vb));
  57. int vn=removal(a,n,va),vm=removal(b,m,vb);
  58. /*
  59. for(int i=1; i<=vn; i++)
  60. cout<<va[i].l<<" "<<va[i].r<<" ";
  61. cout<<endl;
  62. for(int i=1; i<=vm; i++)
  63. cout<<vb[i].l<<" "<<vb[i].r<<" ";
  64. cout<<endl;
  65. */
  66. int ans=,sum=;
  67. for(int i=,j=; i<=vn; i++)
  68. {
  69. while(j<=vm&&vb[j].r<=va[i].l) j++;
  70. sum=;
  71. while(j<=vm&&vb[j].r>va[i].l&&vb[j].l<va[i].r)
  72. {
  73. sum+=min(va[i].r,vb[j].r)-max(va[i].l,vb[j].l);
  74. j++;
  75. }
  76. if(j>&&vb[j-].r>va[i].r) j--;
  77. ans+=va[i].r-va[i].l-sum;
  78. }
  79. cout<<ans<<endl;
  80. }
  81. return ;
  82. }

区间去重

hihoCoder 1305 区间求差的更多相关文章

  1. hihocoder 1305 - 区间求差 - [hiho一下152周][区间问题]

    题目链接:https://hihocoder.com/problemset/problem/1305 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个区间集合 A ...

  2. hiho #1305 区间求差

    #1305 : 区间求差 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个区间集合 A 和 B,其中集合 A 包含 N 个区间[ A1, A2 ], [ A3,  ...

  3. 区间问题 codeforces 422c+hiho区间求差问

    先给出一个经典的区间处理方法 对每个区间 我们对其起点用绿色标识  终点用蓝色标识 然后把所有的点离散在一个坐标轴上 如下图 这样做有什么意义呢.由于我们的区间可以离散的放在一条轴上面那么我们在枚举区 ...

  4. poj3264(线段树区间求最值)

    题目连接:http://poj.org/problem?id=3264 题意:给定Q(1<=Q<=200000)个数A1,A2,```,AQ,多次求任一区间Ai-Aj中最大数和最小数的差. ...

  5. RMQ(区间求最值)

    1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A.回答若干询问RMQ(A,i,j)(i,j<=n).返回数列A ...

  6. HDU 2795 Billboard(区间求最大值的位置update的操作在query里做了)

    Billboard 通过这题,我知道了要活用线段树的思想,而不是拘泥于形式, 就比如这题 显然更新和查询放在一起很简单 但如果分开写 那么我觉得难度会大大增加 [题目链接]Billboard [题目类 ...

  7. hdu4521-小明系列问题——小明序列(线段树区间求最值)

    题意:求最长上升序列的长度(LIS),但是要求相邻的两个数距离至少为d,数据范围较大,普通dp肯定TLE.线段树搞之就可以了,或者优化后的nlogn的dp. 代码为  线段树解法. #include ...

  8. [HDU] 2795 Billboard [线段树区间求最值]

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. linux_coom _ Linux文件比较,文本文件的交集、差集与求差

    交集和差集操作在集合论相关的数学课上经常用到,不过,在Linux下 对文本进行类似的操作在某些情况下也很有用. comm命令 comm命令可以用于两个文件之间的 比较,它有一些选项可以用来调整输出,以 ...

随机推荐

  1. 使用新浪云(SAE)实现基于mySql和微信公众平台的关键字请求响应服务

    本例是作者初次尝试微信公众平台开发之作,实现传统的关键字请求响应功能.即:用户发关键字,公众号通过关键字进行检索, 在mysql数据库中读取与关键字相关的信息,并返回给用户.本例在微信订阅号(开发者模 ...

  2. Hadoop学习11--Ha集群配置启动

    理论知识: http://www.tuicool.com/articles/jameeqm 这篇文章讲的非常详细了: http://www.tuicool.com/articles/jameeqm 以 ...

  3. netbean7.2 改变maven插件的中心库地址

    今天内网安装netbeans 7.2(因为所使用的JDK版本问题),但安装上去之后发现build failure,提示说仓库主机找不到,因为提示上说的是apache的仓库地址.看执行maven的输出可 ...

  4. JVM参数(三)打印所有XX参数及值

    本篇文章基于Java 6(update 21oder 21之后)版本, HotSpot JVM 提供给了两个新的参数,在JVM启动后,在命令行中可以输出所有XX参数和值. -XX:+PrintFlag ...

  5. centos 下Supervisor 守护进程基本配置

    supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...

  6. 安卓:drawable

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...

  7. Windows、VS 与 .net

    原文地址:https://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx .NET Framework version CLR ver ...

  8. 五、selecting with the API

    1. 命令通常从selection list中得到input, 调用MGlobal::getActiveSelectionList(MSelectionList &dest, bool ord ...

  9. windows下scrapy 的安装

    2016-07-18  20:27:53 安装python 根据你的需求下载python安装包,安装python(本文基于python27)https://www.python.org/downloa ...

  10. 按钮的Default Button属性

    如果在窗体上放置一个文本输入框,放置一个按钮,并将按钮default属性设置为True,那么在文本输入框获是焦点时输入Enter键,回车,自动相当于点击按钮.一个窗口只能有一个默认按钮. 这样按回车就 ...