POJ 2528 Mayor's poster
主要是参考了这个博客 地址戳这儿
题目大意: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的更多相关文章
- POJ 2528 Mayor‘s poster 线段树+离散化
给一块最大为10^8单位宽的墙面,贴poster,每个poster都会给出数据 a,b,表示该poster将从第a单位占据到b单位,新贴的poster会覆盖旧的,最多有10^4张poster,求最后贴 ...
- poj 2528 Mayor's posters(线段树+离散化)
/* poj 2528 Mayor's posters 线段树 + 离散化 离散化的理解: 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显 ...
- poj 2528 Mayor's posters 线段树+离散化技巧
poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...
- POJ - 2528 Mayor's posters(dfs+分治)
POJ - 2528 Mayor's posters 思路:分治思想. 代码: #include<iostream> #include<cstdio> #include< ...
- POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)
POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化) 题意分析 贴海报,新的海报能覆盖在旧的海报上面,最后贴完了,求问能看见几张海报. 最多有10000张海报,海报 ...
- POJ 2528 Mayor's posters
Mayor's posters Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- POJ 2528 Mayor's posters(线段树区间染色+离散化或倒序更新)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 59239 Accepted: 17157 ...
- POJ 2528——Mayor's posters——————【线段树区间替换、找存在的不同区间】
Mayor's posters Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- POJ 2528 Mayor's posters 【区间离散化+线段树区间更新&&查询变形】
任意门:http://poj.org/problem?id=2528 Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total S ...
随机推荐
- UbuntuServer 16.04 with LNMP搭建WordPress
前几天弄了个腾讯云服务器,一时新鲜,就想着在上面搭建一个wordpress博客,前后搞了四五天,各种度娘谷歌,各种错误,不过还好,最终总算是被我搭建出来了!不啰嗦,书归正传,下面开始搭建! 目录: 一 ...
- Cookie,Sesstion,Application 缓存。
Cookie客户端缓存. 1.引言 随着浏览器的处理能力不断增强,越来越多的网站开始考虑将数据存储在「客户端」,那么久不得不谈本地存储了. 本地存储的好处: 一是避免取回数据前页面一片空白,如果不需要 ...
- 面向对象(基础oop)之初识继承
大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...
- [javaSE] IO流(RandomAccessFile)
随机访问文件,可以看作一个大型的byte[]数组,不算是IO体系中的一员,内部封装了字节输入输出流,可以设置权限,可以调整指针的位置 获取RandomAccessFile对象,构造参数:String文 ...
- java map常用的4种遍历方法
public static void main(String[] args) { Map<String, String> map = new HashMap<String, Stri ...
- 最大行走路线问题(DP)
在一个NxN的棋盘上,每个格子里有若干个棋子,假设起点为左上角的格子,且每次只能向下或向右走一格,问怎样走才能得到最多的棋子. 这是很简单的递推题了. 因为只能向下或者向右,所以其实我们可以把棋盘看成 ...
- Luogu 4240:毒瘤之神的考验
传送门 Sol 分开考虑 \(\varphi(ij)\) 中 \(ij\) 的质因子 那么 \[\varphi(ij)=\frac{\varphi(i)\varphi(j)gcd(i,j)}{\var ...
- Dinic算法----最大流常用算法之一
——没有什么是一个BFS或一个DFS解决不了的:如果有,那就两个一起. 最大流的$EK$算法虽然简单,但时间复杂度是$O(nm^2)$,在竞赛中不太常用. 竞赛中常用的$Dinic$算法和$SAP$, ...
- vue项目使用vue-i18n和iView切换多语言
效果图: 当然,如果使用iview组件,组件也会对应切换语言. 这里,假设已经用vue-cli脚手架创建了项目,熟悉vue-router,而且已经引入了iview UI. 第一步: 我们在main.j ...
- chrome devtools的debug相关
搜索ctrl+p:搜索Sources面板中指定的文件:然后在主窗口文件标签右键选择reveal in navigator可以在目录中显示当前文件.ctrl+f:搜索devtool主显示窗口所在文件的指 ...