主要是参考了这个博客 地址戳这儿

题目大意:n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000) 。求出最后还能看见多少张海报。

对于输入要离散化,之后线段树维护张贴的状态。

留意由于一般的离散化可能导致一些区间被“挤压掉”

比如

1-10 1-4 5-10
1-10 1-4 6-10  被处理成了一样的情况导致错漏。

方法是在相差超过1的相邻点插多一个点,使得离散化的时候不会挤压在一起。还有要注意的地方就是空间开多大,一般是要开4倍点空间,但是由于上述增加点的操作会新增加一些点,直接4*2e4是不行的,直接开8×2e4就ok了。

还有,离散化映射的时候能不用STL最好,宁可开个1kw的数组映射,或者用二分法映射,否则容易TLE。

  1. #include <stdio.h>
  2. #include <algorithm>
  3. #include <string.h>
  4. using namespace std;
  5.  
  6. #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
  7. const int maxN=1e4+;
  8. int N, M, K, T;
  9.  
  10. struct Post{int x, y;}nd[maxN];
  11. int g[maxN * ], sg[maxN * ], vis[maxN];
  12. int ans;
  13.  
  14. #define lson l,m,rt*2
  15. #define rson m+1,r,rt*2+1
  16.  
  17. void push_down(int rt) {
  18. if (sg[rt] == -) return;
  19. sg[rt * ] = sg[rt * + ] = sg[rt];
  20. sg[rt] = -;
  21. }
  22. void update(int L, int R, int C, int l, int r, int rt) {
  23. if (L <= l && r <= R) {
  24. sg[rt] = C;
  25. return;
  26. }
  27. push_down(rt);
  28. int m = (l + r) / ;
  29. if (L <= m) update(L, R, C, lson);
  30. if (R > m) update(L, R, C, rson);
  31. }
  32. void query(int l, int r, int rt) {
  33. if (sg[rt] != -) {
  34. if (vis[sg[rt]] == )
  35. ++ans;
  36. vis[sg[rt]] = ;
  37. return;
  38. }
  39. if (l == r) return;
  40. int m = (l + r) / ;
  41. query(lson);
  42. query(rson);
  43. }
  44.  
  45. int main () {
  46. #ifndef ONLINE_JUDGE
  47. freopen("data.in", "r", stdin);
  48. #endif
  49. scanf("%d", &T);
  50. while (T--) {
  51. // 输入及离散化
  52. scanf("%d", &N);
  53. int cnt = ;
  54. FOR(i, , N) {
  55. scanf("%d%d", &nd[i].x, &nd[i].y);
  56. g[cnt++] = nd[i].x;
  57. g[cnt++] = nd[i].y;
  58. }
  59. sort(g, g + cnt);
  60. int m = unique(g, g + cnt) - g;
  61. int ocnt = m;
  62. FOR(i, , ocnt - )
  63. if (g[i + ] - g[i] > )
  64. g[m++] = g[i] + ;
  65. sort(g, g + m);
  66.  
  67. // 建线段树以及输出答案
  68. memset(sg, -, sizeof sg);
  69. memset(vis, , sizeof vis);
  70.  
  71. FOR(i, , N) {
  72. int l = lower_bound(g, g + m, nd[i].x) - g;
  73. int r = lower_bound(g, g + m, nd[i].y) - g;
  74. update(l, r, i, , m, );
  75. }
  76. ans = ;
  77. query(, m, );
  78. printf("%d\n", ans);
  79. }
  80. return ;
  81. }

POJ 2528 Mayor's poster的更多相关文章

  1. POJ 2528 Mayor‘s poster 线段树+离散化

    给一块最大为10^8单位宽的墙面,贴poster,每个poster都会给出数据 a,b,表示该poster将从第a单位占据到b单位,新贴的poster会覆盖旧的,最多有10^4张poster,求最后贴 ...

  2. poj 2528 Mayor's posters(线段树+离散化)

    /* poj 2528 Mayor's posters 线段树 + 离散化 离散化的理解: 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显 ...

  3. poj 2528 Mayor's posters 线段树+离散化技巧

    poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...

  4. POJ - 2528 Mayor's posters(dfs+分治)

    POJ - 2528 Mayor's posters 思路:分治思想. 代码: #include<iostream> #include<cstdio> #include< ...

  5. POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)

    POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化) 题意分析 贴海报,新的海报能覆盖在旧的海报上面,最后贴完了,求问能看见几张海报. 最多有10000张海报,海报 ...

  6. POJ 2528 Mayor's posters

    Mayor's posters Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub ...

  7. POJ 2528 Mayor's posters(线段树区间染色+离散化或倒序更新)

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 59239   Accepted: 17157 ...

  8. POJ 2528——Mayor's posters——————【线段树区间替换、找存在的不同区间】

    Mayor's posters Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub ...

  9. POJ 2528 Mayor's posters 【区间离散化+线段树区间更新&&查询变形】

    任意门:http://poj.org/problem?id=2528 Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total S ...

随机推荐

  1. java几个经典的算法题目----------查询子串和等于已知数字

    给出一个排序好的数组和一个数,求数组中连续元素的和等于所给数的子数组 public class testClockwiseOutput { public static void main(String ...

  2. java多线程---------java.util.concurrent并发包----------ThreadPoolExecutor

    ThreadPoolExecutor线程池 一.三个构造方法 ThreadPoolExecutor(int corePoolSize,int MaxmumPoolSize,long KeepAlive ...

  3. 一头扎进Spring之---------Spring七大核心模块

    Spring七大核心模块 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanF ...

  4. BZOJ1050 旅行comf(kruskal)

    旅行comf 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大边和最小边 ...

  5. 为什么各大网站都纷纷用起了https?哪些网站需要https(SSL证书)

    其实最近我也在易维信网站的开发组内讨论应用全站https事宜. 其原因非常简单. 因为不断接到用户投诉说网站上出现影响浏览体验的大面积广告. 可是网站平常只针对未登录用户在顶栏和底栏打两小条广告.而且 ...

  6. java 初始化顺序问题

    今天在<thinking in java>上面看了关于初始化问题,之前从来都没有深入考虑过,这次算是把它搞明白了,所以记录一下: 这个不是我看到的初始化顺序问题,在网上搜索的时候发现的,感 ...

  7. 多功能电子通讯录(涉及到了双向链表的使用,Linux文件编程等等)

    readme.txt //作为一个程序员,我们咋么能不写用户手册呢!MSP的我觉得用户体验是王道,苹果手机的用户体验的确不错!不过WP加油!我去,扯远了!赶紧看我的程序吧!  歡迎使用多功能電子通訊錄 ...

  8. Android服务--布局服务(LayoutInflater)

    1. 基本概念 1. 概念: 参考资料:https://www.cnblogs.com/androidez/archive/2013/07/01/3164729.html 一个用于加载布局的系统服务, ...

  9. 使用StackPanel进行简单地布局

    尽管StackPanel非常简单,但是其实用性也非常强 ,Stackpanel将子元素以堆叠的形式 排列在一行或一列.通常建议使用该控件对于一些小范围内的控件进行布局. 如果要架设用户控件的框架结构, ...

  10. Dapper的简单使用(初学者归纳)

    Dapper的简单使用(初学者归纳) //引用:using System;using System.Collections.Generic;using System.Linq;using System ...