POJ 2528 Mayor's posters(线段树)
题目大意
贴海报。每张海报的高度都是一样的,唯独宽度不一样。每张海报只能占用整数倍的单位线段长度,贴了 n(n<=10000) 张海报之后,有几张能够看见(有一个角能看见这张海报也算被看见了)?海报的宽度最大可以达到 10^7
做法分析
一看就是线段树
先不考虑线段的长度能够达到 10^7
肯定是给每张海报一个颜色,然后在这张海报能够占领的区间中涂上这个颜色。每次更新的时候就直接区间操作,记得使用懒操作
最后统计颜色就行了,统计颜色的时候用一个辅助数组,记录这个颜色是否出现过
最后就是处理线段的长度了,显然离散化
但是这里有一个小问题:题目所给的区间,例如是 [2, 4] ,表示的是 第 2 个到第 4 个长度为 1 的小区间。我们这里不能直接根据数的大小离散化
排序后,假设当前数是 x,如果 x-1 出现过,那么 x 离散化后应该是 x-1 的标记 +1,否则应该是上一个的标记 +2
参考代码
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <map> 6 #include <vector> 7 8 using namespace std; 9 10 const int N=20006; 11 12 int ans; 13 bool vs[N]; 14 15 struct interval_tree 16 { 17 struct data 18 { 19 int st, en, color; 20 data() {} 21 data(int a, int b, int c) 22 { 23 st=a, en=b, color=c; 24 } 25 }T[N<<3]; 26 27 void build(int id, int L, int R) 28 { 29 T[id]=data(L, R, 0); 30 if(L==R) return; 31 int mid=(L+R)>>1; 32 build(id<<1, L, mid); 33 build(id<<1|1, mid+1, R); 34 } 35 36 inline void pushDown(int id) 37 { 38 T[id<<1].color=T[id<<1|1].color=T[id].color; 39 T[id].color=0; 40 } 41 42 void update(int id, int L, int R, int color) 43 { 44 if(L<=T[id].st && T[id].en<=R) 45 { 46 T[id].color=color; 47 return; 48 } 49 if(T[id].color!=0) pushDown(id); 50 51 int mid=(T[id].st+T[id].en)>>1; 52 if(R<=mid) update(id<<1, L, R, color); 53 else if(L>mid) update(id<<1|1, L, R, color); 54 else update(id<<1, L, R, color), update(id<<1|1, L, R, color); 55 } 56 57 void query(int id) 58 { 59 if(T[id].color!=0 && !vs[T[id].color]) 60 { 61 ans++, vs[T[id].color]=1; 62 return; 63 } 64 if(T[id].st==T[id].en) return; 65 if(T[id].color!=0) pushDown(id); 66 query(id<<1), query(id<<1|1); 67 } 68 }tree; 69 70 vector <int> temp; 71 map <int, int> ihash; 72 73 struct node 74 { 75 int L, R; 76 node() {} 77 node(int a, int b) 78 { 79 L=a, R=b; 80 } 81 }op[N]; 82 int n, t, tot; 83 84 int main() 85 { 86 scanf("%d", &t); 87 for(int ca=1; ca<=t; ca++) 88 { 89 scanf("%d", &n); 90 temp.clear(), ihash.clear(), tot=0; 91 for(int i=0, a, b; i<n; i++) 92 { 93 scanf("%d%d", &a, &b); 94 op[i]=node(a, b); 95 temp.push_back(a), temp.push_back(b); 96 } 97 sort(temp.begin(), temp.end()); 98 for(int i=0; i<2*n; i++) 99 { 100 int u=temp[i]; 101 if(ihash.find(u)==ihash.end()) 102 { 103 if(ihash.find(u-1)==ihash.end()) 104 ihash.insert(make_pair(u, tot+1)), tot+=2; 105 else 106 ihash.insert(make_pair(u, tot)), tot++; 107 } 108 } 109 110 tree.build(1, 1, tot+2); 111 for(int i=0; i<n; i++) 112 tree.update(1, ihash[op[i].L], ihash[op[i].R], i+1); 113 for(int i=1; i<=n; i++) vs[i]=0; 114 ans=0; 115 tree.query(1); 116 printf("%d\n", ans); 117 } 118 return 0; 119 }
AC通道
POJ 2528 Mayor's posters
南洋理工 第 9 题 posters
转载于:https://www.cnblogs.com/zhj5chengfeng/archive/2013/03/26/2982737.html
POJ 2528 Mayor's posters(线段树)相关推荐
- poj 2528 Mayor's posters (线段树+离散化)
/*离散化+线段树由于 数据的输入最大是 10000000 ,直接用开数组肯点会超,所以要将起离散话,首先 ,我们存储输入的边,将其离散化,后面的就和一般的线段树一样可. */#include< ...
- POJ - 2528 Mayor's posters(线段数+离散化)
题目链接:点击查看 题目大意:给定一个长度为1e7的墙,然后给出n张海报,每张海报都会占据墙上的一部分宽度,问按照给出的次序往墙上贴海报, 最后有几张海报能露出来(露出部分也算) 题目分析:线段树的区 ...
- poj 2528 Mayor's posters(线段树+离散化)
1 /* 2 poj 2528 Mayor's posters 3 线段树 + 离散化 4 5 离散化的理解: 6 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用 ...
- 离散化/线段树 (POJ - 2528 Mayor's posters)
Mayor's posters https://vjudge.net/problem/POJ-2528#author=szdytom 线段树 + 离散化 讲解:https://blog.csdn.ne ...
- poj 2528 Mayor's posters(线段树 离散化 区间更新 贴海报)
这个题目本来对大神来说可能是水题, 对我就不行了,昨晚非折腾到下半夜一点 搞定, 并且可以总结出 ,只有把问题想清楚,或着看人家解题报告自己把问题和代码思路 搞清楚,才能谈的上调bug,否则 ...
- POJ 2528 Mayor's posters (离散化和线段树使用)
还是做了线段树的题目,玩了两天也要继续看看题目了.之前就有看离散化的概念,大家可以去百度百科一下,简单转载一个例子 离散化 的大概思路 : 比如说给你一组 数据 1 4 1000 100000, 如果 ...
- POJ 2528 Mayor's posters 贴海报 线段树 区间更新
注意离散化!!!线段树的叶子结点代表的是一段!!! 给出下面两个简单的例子应该能体现普通离散化的缺陷: 1-10 1-4 5-10 1-10 1-4 6-10 普通离散化算出来的结果都会是2,但是第二 ...
- POJ - 2528 Mayor's posters (浮水法+线段树/离散化+线段树)
题目链接 题意: n(n<=10000)个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000) .求出最后还能看见多少张海报. 分析1 离散 ...
- POJ Mayor's posters——线段树+离散化
原文:http://blog.163.com/cuiqiongjie@126/blog/static/85642734201261151553308/ 大致题意: 有一面墙,被等分为1QW份,一份的宽 ...
最新文章
- 3ds max 改变模型轴的坐标系位置
- 资源 | 《统计学习方法》的Python 3.6复现,实测可用
- 计算机网络智能化在铁路通信的发展,计算机网络在铁路信号中的应用
- springboot整合websocket实现一对一消息推送和广播消息推送
- 前端学习(2707):重读vue电商网站27之通过axios请求拦截器添加 token
- 【HDU - 4348】To the moon(主席树,区间更新)
- EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs初始化的一些样式处理...
- centos6.5下postgresql9.4.3安装与配置
- c语言程序设计 江宝钏 实验九,c语言程序设计,江宝钏著,实验九
- .NET Remoting Basic(9)-上下文(CallContext)
- YASKAWA 安川变频器调试软件支持多种机型
- 场景文字检测——CTPN模型介绍及代码实现
- linux i350网卡,intel I350 网卡驱动安装方法
- 原创 | 最近程序员频繁被抓,如何避免面向监狱编程?!
- IDC评述网:2012年国外域名主机服务商TOP10
- app支付宝接入流程图_Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)...
- flutter能开发游戏吗_Flutter Flame游戏开发上手(1)
- TI15.4STACK协议栈解读
- 规避Variable used in lambda expression should be final or effectively final而引发了方法参数值拷贝的问题
- wap实现手机充话费
热门文章
- OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3
- 2022-2028年中国乙酸钴行业发展现状调研及市场前景规划报告
- 2022-2028年中国纳滤膜产业发展态势及市场发展策略报告
- Git 常用操作(3)- 本地分之显示、创建、切换、合并和删除操作
- pip 将 某包指定到某目录 批量安装
- LeetCode简单题之猜数字大小
- Harmony生命周期
- YOLOV4各个创新功能模块技术分析(二)
- 2021年大数据Kafka(六):❤️安装Kafka-Eagle❤️
- 2021年大数据Hive(九):Hive的数据压缩