以后做双精题请至少先跑个数据。。。输入都不一样。。。

做法就是离散化大力线段树。

记得在x+1和y-1插点 看这个数据:

1000 12
1 100
50 80
80 99
50 98
1 56
100 200
200 300
300 500
500 600
600 1000
260 560
160 580

输出7(自己yy吧yy不了网上大把题解)

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<algorithm>
  6. #include<cmath>
  7. using namespace std;
  8.  
  9. int n,m;
  10. struct query
  11. {
  12. int x,y;
  13. }q[];
  14. int lslen,ls[];
  15. void LSH()
  16. {
  17. lslen=;
  18. for(int i=;i<=m;i++)
  19. {
  20. ls[++lslen]=q[i].x,ls[++lslen]=q[i].y;
  21. if(q[i].x+<q[i].y)
  22. ls[++lslen]=q[i].x+,ls[++lslen]=q[i].y-;
  23. }
  24. ls[++lslen]=n;
  25. sort(ls+,ls+lslen+);
  26.  
  27. lslen=unique(ls+,ls+lslen+)-ls-;
  28. for(int i=;i<=m;i++)
  29. q[i].x=lower_bound(ls+,ls+lslen+,q[i].x)-ls,
  30. q[i].y=lower_bound(ls+,ls+lslen+,q[i].y)-ls;
  31. n=lower_bound(ls+,ls+lslen+,n)-ls;
  32. }
  33.  
  34. struct trnode
  35. {
  36. int l,r,lc,rc,c;
  37. }tr[];int trlen;
  38. void bt(int l,int r)
  39. {
  40. int now=++trlen;
  41. tr[now].l=l;tr[now].r=r;tr[now].c=-;
  42. tr[now].lc=tr[now].rc=-;
  43. if(l<r)
  44. {
  45. int mid=(l+r)/;
  46. tr[now].lc=trlen+;bt(l,mid);
  47. tr[now].rc=trlen+;bt(mid+,r);
  48. }
  49. }
  50. void change(int now,int l,int r,int k)
  51. {
  52. if(tr[now].l==l&&tr[now].r==r){tr[now].c=k;return ;}
  53.  
  54. int mid=(tr[now].l+tr[now].r)/;
  55. int lc=tr[now].lc,rc=tr[now].rc;
  56.  
  57. if(tr[now].c!=-)
  58. {
  59. tr[lc].c=tr[now].c;
  60. tr[rc].c=tr[now].c;
  61. }
  62.  
  63. if(r<=mid) change(lc,l,r,k);
  64. else if(mid+<=l)change(rc,l,r,k);
  65. else change(lc,l,mid,k), change(rc,mid+,r,k);
  66.  
  67. if(tr[lc].c==tr[rc].c)tr[now].c=tr[lc].c;
  68. else tr[now].c=-;
  69. }
  70. bool col[];
  71. void findans(int now,int l,int r)
  72. {
  73. if(tr[now].c!=-){col[tr[now].c]=true;return ;}
  74. if(l==r)return ;
  75.  
  76. int mid=(tr[now].l+tr[now].r)/;
  77. int lc=tr[now].lc,rc=tr[now].rc;
  78.  
  79. if(r<=mid) findans(lc,l,r);
  80. else if(mid+<=l)findans(rc,l,r);
  81. else findans(lc,l,mid),findans(rc,mid+,r);
  82. }
  83. int main()
  84. {
  85. n=1e7;scanf("%d",&m);
  86. for(int i=;i<=m;i++)
  87. {
  88. scanf("%d%d",&q[i].x,&q[i].y);
  89. if(q[i].x>n)i--,m--;
  90. if(q[i].y>n)q[i].y=n;
  91. }
  92. LSH();
  93.  
  94. trlen=;bt(,n);
  95. for(int i=;i<=m;i++)change(,q[i].x,q[i].y,i);
  96.  
  97. memset(col,false,sizeof(col));
  98. findans(,,n);
  99. int ans=;
  100. for(int i=;i<=m;i++)
  101. if(col[i]==true)ans++;
  102. printf("%d\n",ans);
  103. return ;
  104. }

bzoj5029: 贴小广告&&bzoj5168: [HAOI2014]贴海报的更多相关文章

  1. BZOJ5029: 贴小广告 & BZOJ5168: [HAOI2014]贴海报

    [传送门:BZOJ5029&BZOJ5168] 简要题意: 给出m段区间l[i],r[i],表示l[i]到r[i]的数全部变成i,求出最后有多少种不同的数 题解: 线段树+离散化 这是一道经典 ...

  2. bzoj5029 贴小广告

    Description 现在有一堵墙,墙上分为若干个单元.接下来会来n个人在墙上贴小广告.每次每个人选择墙上连续一段的单元贴上自己公司与众不同的小广告.因为小广告可能会出现被覆盖的情况,由于公司之间存 ...

  3. BZOJ5168: [HAOI2014]贴海报 线段树

    Description Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委 员 会为选民准备了一个张贴海报的electoral墙.张贴规则如下 ...

  4. 从运营商小广告到HTTPS

    相信很多人都试过这样的经历,浏览一个正常的网站时,右下突然角弹出一堆小广告,而且这些广告的内容和你浏览的网站格格不入: 前几天还有某微博用户爆料访问github时居然也有广告: 又或者,你有没有试过因 ...

  5. 【题解】Luogu P3740 [HAOI2014]贴海报

    woc,今天已经是day -1了 再写一颗珂朵莉树来++rp吧 否则就要AFO了qaq 这有可能是我最后一篇题解/博客qaq 原题传送门:P3740 [HAOI2014]贴海报 考前刷水题到底是对还是 ...

  6. 1682. [HAOI2014]贴海报

    1682. [HAOI2014]贴海报 ★★☆   输入文件:ha14d.in   输出文件:ha14d.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] Byteto ...

  7. PJzhang:关闭wps小广告和快速关闭445端口

    猫宁!!! ​​   kali linux上安装的wps,没有广告,而且轻巧简洁.   如果你在windows上安装wps,除了ppt.word.excel,还会有一个h5的应用,当然,最令人烦扰的当 ...

  8. cogs1682. [HAOI2014]贴海报 x

    1682. [HAOI2014]贴海报 ★★☆   输入文件:ha14d.in   输出文件:ha14d.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] Bytetow ...

  9. 淘宝小广告的鼠标移上实现html, JavaScript代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 在C#程序中,创建、写入、读取XML文件的方法

    一.在C#程序中,创建.写入.读取XML文件的方法 1.创建和读取XML文件的方法,Values为需要写入的值 private void WriteXML(string Values) { //保存的 ...

  2. 【Oracle】rollup函数

    当我们在做报表统计的时候,很多时候需要用到‘合计’这个功能,比如我们想得到如下格式的报表: 这张表是按照deptno分组,然后按照deptno分组合计.rollup函数可以完美的解决这个问题. 1.建 ...

  3. JavaScript小技巧总结

    JavaScript是一种脚本语言: 语法类似于常见的高级语言 脚本语言,不需要编译就可以由解释器直接运行 变量松散定义 面向对象 JSON是一种数据交换格式,而JSONP是JSON的一种使用模式,是 ...

  4. PyCharm for Mac 调整字体大小

    网上的教程大多已过时,那个路径根本找不到,于是就有了本文. 前言 以前用 Sublime 时,直接快捷键CMD+[+/-](CMD加加号或减号)直接调整字体大小,非常方便,后来用 VSCode,字体大 ...

  5. 集合运算(UNION)

    表的加法 集合运算:就是满足统一规则的记录进行的加减等四则运算. 通过集合运算可以得到两张表中记录的集合或者公共记录的集合,又或者其中某张表中记录的集合. 集合运算符:用来进行集合的运算符. UNIO ...

  6. apicloud图片上传

    app中的图片上传,例如:个人信息页面,上传头像 使用: UIMediaScanner 地址: https://docs.apicloud.com/Client-API/UI-Layout/UIMed ...

  7. Nginx.conf介绍

    在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络. #运行用户user www-data;    #启动进程,通常设置成和cpu的数量相等worker_process ...

  8. BZOJ 1645: [Usaco2007 Open]City Horizon 城市地平线 扫描线 + 线段树 + 离散化

    Code: #include<cstdio> #include<algorithm> #include<string> #define maxn 1030000 # ...

  9. Socket编程(day14)

    一.基于TCP传输层的编程模型 TCP是面向连接的,安全可靠的. 三次握手 服务器端编程模型 .创建一个用于网络通讯的设备 通讯端点 socket() #include <sys/types.h ...

  10. 域名IP绑定

    该文为阿里云域名举例 首先具备3个前提: 买服务器并搭建环境:阿里云官网购买阿里云的服务器(我购买的是window系统,ECS服务器). 在自己的云服务器上布置上jdk,配置环境变量:安装上tomca ...