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

题目大意: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。

#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std; #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
const int maxN=1e4+;
int N, M, K, T; struct Post{int x, y;}nd[maxN];
int g[maxN * ], sg[maxN * ], vis[maxN];
int ans; #define lson l,m,rt*2
#define rson m+1,r,rt*2+1 void push_down(int rt) {
if (sg[rt] == -) return;
sg[rt * ] = sg[rt * + ] = sg[rt];
sg[rt] = -;
}
void update(int L, int R, int C, int l, int r, int rt) {
if (L <= l && r <= R) {
sg[rt] = C;
return;
}
push_down(rt);
int m = (l + r) / ;
if (L <= m) update(L, R, C, lson);
if (R > m) update(L, R, C, rson);
}
void query(int l, int r, int rt) {
if (sg[rt] != -) {
if (vis[sg[rt]] == )
++ans;
vis[sg[rt]] = ;
return;
}
if (l == r) return;
int m = (l + r) / ;
query(lson);
query(rson);
} int main () {
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif
scanf("%d", &T);
while (T--) {
// 输入及离散化
scanf("%d", &N);
int cnt = ;
FOR(i, , N) {
scanf("%d%d", &nd[i].x, &nd[i].y);
g[cnt++] = nd[i].x;
g[cnt++] = nd[i].y;
}
sort(g, g + cnt);
int m = unique(g, g + cnt) - g;
int ocnt = m;
FOR(i, , ocnt - )
if (g[i + ] - g[i] > )
g[m++] = g[i] + ;
sort(g, g + m); // 建线段树以及输出答案
memset(sg, -, sizeof sg);
memset(vis, , sizeof vis); FOR(i, , N) {
int l = lower_bound(g, g + m, nd[i].x) - g;
int r = lower_bound(g, g + m, nd[i].y) - g;
update(l, r, i, , m, );
}
ans = ;
query(, m, );
printf("%d\n", ans);
}
return ;
}

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多线程--------深入分析 ThreadLocal 内存泄漏问题

    前言 ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度.但是如果滥用ThreadLocal,就可能 ...

  2. linux系统挂载U盘,中文文件名乱码解决方案

    本人(壮壮熊)所用系统:ubuntu 12.4 今天在使用mount指令挂在硬盘时,出现令人头疼的中文文件名乱码. 问题: 使用mount /dev/sdb1 /media指令挂在第二颗硬盘的第一个分 ...

  3. Calendar介绍

    java.util.Calendar是一个抽象类,它定义了日历相关的一系列操作,使用java.util.Calendar除了可以表示日期和时间,还可以用它来对时期或时间进行算术运算,比如获取当前日期1 ...

  4. leetcode简单题目两道(3)

    本来打算写redis的,时间上有点没顾过来,只能是又拿出点自己的存货了. Problem Given an array nums, write a function to move all 's to ...

  5. ajax从零基础到实战

    一. 什么是AJAX? ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 二. 在项目中怎么运用AJAX? 项目主要文件夹目录有img文件夹,css文件夹,js文件夹,如果你要运 ...

  6. webstorm中es6语法报错,.vue文件中es6语法报错

    1.webstorm中es6语法报错,解决方法: 打开 Settings => Languages & Frameworks => Javascript把 Javascript L ...

  7. html制作chm格式开源文档

    在主界面点击生成器,找到网页所在的文件夹. 然后用编译,还是找到网页文件夹.根据需要设置.TOC 那一项是目录,请根据需要修改. 特别要注意的是,预设那里,点击那个配置图标,会打开如下图的预设编辑器. ...

  8. 完美世界-Java游戏开发-二面

    时间:2017-03-30 时长:15分 类型:二面 面试官比较聊得来,人比较和善,游戏面试还是nice的,老铁 1. 自我介绍 2. 平时玩哪些游戏?端游.页游 3. Maven你是怎么使用的? 4 ...

  9. [linux] C语言Linux系统编程-socket开发

    struct sockaddr_in serv_addr; 1.定义结构体变量,结构体是一种数据类型,那么就可以用它来定义变量 2.struct 结构体名 变量名; (struct sockaddr* ...

  10. 搭建和启动javaWeb项目

    首先,我们得配置服务器,我的demo采用tomcat 你只要找到tomcat的home路径就好了,后面会自动给你提示的