poj 2528 Mayor's posters(线段树+离散化)
1 /* 2 poj 2528 Mayor's posters 3 线段树 + 离散化 4 5 离散化的理解: 6 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显 7 会导致内存的耗尽。所以我们做一个映射关系,将范围很大的数据映射到范围很小的数据上 8 1---->1 4----->2 100----->3 1000000000----->4 9 这样就会减少内存一些不必要的消耗 10 建立好映射关系了,接着就是利用线段树求解 11 */ 12 #include<iostream> 13 #include<cstdio> 14 #include<queue> 15 #include<cstring> 16 #include<algorithm> 17 #define N 10000010 18 #define M 10005 19 using namespace std; 20 class EDGE{ 21 public: 22 int ld, rd; 23 }; 24 int tree[M*16];//一共有M*2个端点,一个线段映射到四个点,左右端点, 左端点-1, 右端点+1, 数组的大小是线段树最底层数据个数的4倍 25 EDGE edge[M]; 26 int p[M*4]; 27 int hash[N]; 28 int n; 29 30 int insert(int p, int lr, int rr, int ld, int rd){ 31 32 if(tree[p] && lr<=ld && rd<=rr)//如果当前的区间[ld, rd]被包含在[lr, rr]中,而且[lr, rr]的区间已经被覆盖 33 return 1; 34 else if(lr==ld && rr==rd){ 35 tree[p]=1; 36 return 0; 37 } 38 else{ 39 int mid=(lr+rr)>>1; 40 int f1, f2, f3, f4; 41 if(mid>=rd) 42 f1=insert(p<<1, lr, mid, ld, rd); 43 else if(mid<ld) 44 f2=insert(p<<1|1, mid+1, rr, ld, rd); 45 else{ 46 f3=insert(p<<1, lr, mid, ld, mid); 47 f4=insert(p<<1|1, mid+1, rr, mid+1, rd); 48 } 49 tree[p]=tree[p<<1] && tree[p<<1|1];//两个子树都被覆盖的时候父类才会被覆盖 50 if(mid>=rd) 51 return f1; 52 else if(mid<ld) 53 return f2; 54 else return f3 && f4; 55 } 56 } 57 /* 58 3 59 1 10 60 1 3 61 6 10 62 如果将一个线段离散化成两个点,输出地结果是2 63 如果是四个节点,输出的结果就是3 64 而正确的结果就是3 65 */ 66 67 int main(){ 68 int t, i, nm; 69 scanf("%d", &t); 70 while(t--){ 71 int maxR=0; 72 scanf("%d", &n); 73 for(i=0; i<n; ++i){ 74 scanf("%d%d", &edge[i].ld, &edge[i].rd); 75 p[maxR++]=edge[i].ld-1; 76 p[maxR++]=edge[i].ld; 77 p[maxR++]=edge[i].rd; 78 p[maxR++]=edge[i].rd+1; 79 } 80 sort(p, p+maxR); 81 maxR=unique(p, p+maxR)-p;//元素去重 82 for(i=0, nm=0; i<maxR; ++i){ 83 hash[p[i]]=++nm; 84 } 85 memset(tree, 0, sizeof(tree));//初始值是所有的点都没有被覆盖 86 int ans=0; 87 for(i=n-1; i>=0; --i){//由外向里看真是个不错的主意 88 if(!insert(1, 1, nm, hash[edge[i].ld], hash[edge[i].rd])) 89 ++ans; 90 } 91 printf("%d\n", ans); 92 } 93 return 0; 94 }
转载于:https://www.cnblogs.com/hujunzheng/p/3819362.html
poj 2528 Mayor's posters(线段树+离散化)相关推荐
- poj 2528 Mayor's posters (线段树+离散化)
/*离散化+线段树由于 数据的输入最大是 10000000 ,直接用开数组肯点会超,所以要将起离散话,首先 ,我们存储输入的边,将其离散化,后面的就和一般的线段树一样可. */#include< ...
- POJ - 2528 Mayor's posters(线段数+离散化)
题目链接:点击查看 题目大意:给定一个长度为1e7的墙,然后给出n张海报,每张海报都会占据墙上的一部分宽度,问按照给出的次序往墙上贴海报, 最后有几张海报能露出来(露出部分也算) 题目分析:线段树的区 ...
- POJ Mayor's posters——线段树+离散化
原文:http://blog.163.com/cuiqiongjie@126/blog/static/85642734201261151553308/ 大致题意: 有一面墙,被等分为1QW份,一份的宽 ...
- POJ-2528 Mayor's posters 线段树+离散化 或 DFS
题目大意 有 t 组数据,每组有 n 张(1<=n<=1e4)覆盖了 区间 [li,ri] 的海报(1<=i<=n,1<=li<=ri<=1e7),海报会由于 ...
- POJ 2528 Mayor's posters(线段树)
题目大意 贴海报.每张海报的高度都是一样的,唯独宽度不一样.每张海报只能占用整数倍的单位线段长度,贴了 n(n<=10000) 张海报之后,有几张能够看见(有一个角能看见这张海报也算被看见了)? ...
- 离散化/线段树 (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 (浮水法+线段树/离散化+线段树)
题目链接 题意: n(n<=10000)个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000) .求出最后还能看见多少张海报. 分析1 离散 ...
最新文章
- 算法--------最长连续序列(Java版本)
- 一天搞定CSS: overflow--14
- Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误
- centOS安装java
- 中文WAP浏览器WapDisplayer V1.5发布
- UBI文件系统和镜像的制作及分区挂载说明
- 新编计算机英语,新编计算机英语教程
- LeetCode 459. 重复的子字符串(Repeated Substring Pattern)
- 【转】无需刻录DMG光盘,教你在VMWare下安装MAC OS X Snow Leopard 10.6
- 修改表字段属性_设置对象表字段的有效性规则
- python爬虫爬取一次数据多长时间_「Python爬虫系列讲解」1. 网络数据爬取概述
- Windows、Linux、Mac OS下的锐捷认证的程序——mentohust
- 【硬件】详解电流采样电路
- 毫米波雷达,超声波雷达,激光雷达,摄像雷达比较
- Java 算法题目 走楼梯
- gcc:扩展功能:除标准里定义的C特性之外的功能;-pedantic
- 同为iOS开发者为什么有人4k有人40k?原因就在这里!
- 根据.mdf、.ndf和.ldf文件恢复数据库数据
- Caliburn.Micro学习笔记目录——Zhouyongh
- 一个既有趣又简单的整人代码——关机代码
热门文章
- c语言线性分类回归库 台湾,最全的线性回归算法库总结—— scikit-learn篇
- Hadoop集群安装部署_分布式集群安装_01
- Swagger的描述注释配置详解
- 解决SecureCRT与SecureFX中文乱码问题
- 服务器配置再生龙系统,PXE引导再生龙安装步骤
- vs 如何将源文件转换成可执行文件_如何将手机便签转换成word文本文档
- 斐波那契数列 青蛙跳台阶 变态跳台阶
- 与java线程有关的,线程多少和什么有关?大神们表示有话要说!
- java 旋转图片_Java实现图片翻转以及任意角度旋转
- 惠普打印机节能环保认证证书_低成本高效办公 苏宁惠普超品日这几款打印机了解下!...