poj2528(线段树)
题目连接:http://poj.org/problem?id=2528
题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报
分析:离散化+线段树,这题因为每个数字其实表示的是一个单位长度,因此离散化后的每个点如果相邻数字间距大于1的话,得在其中加上任意一个数字。
否则 如 [1 10] [1 3] [5 10]这组数据能看见3种海报,而离散化后[1,3,5,10]对应[1,2,3,4],更新[1,2]再更新[3,4]就能看见两种海报了。所以离散化应为[1,2,3,4,5,9,10].
- #pragma comment(linker,"/STACK:102400000,102400000")
- #include <cstdio>
- #include <cstring>
- #include <string>
- #include <cmath>
- #include <iostream>
- #include <algorithm>
- #include <queue>
- #include <cstdlib>
- #include <stack>
- #include <vector>
- #include <set>
- #include <map>
- #define LL long long
- #define mod 1000000007
- #define inf 0x3f3f3f3f
- #define N 200010
- #define FILL(a,b) (memset(a,b,sizeof(a)))
- #define lson l,m,rt<<1
- #define rson m+1,r,rt<<1|1
- using namespace std;
- bool has[N];
- int le[N],ri[N];
- int col[N<<],X[N];
- int ans;
- int bin(int key,int n,int a[])
- {
- int l=,r=n-;
- while(l<=r)
- {
- int m=(l+r)>>;
- if(a[m]==key)return m;
- if(a[m]<key)l=m+;
- else r=m-;
- }
- }
- void Pushdown(int rt)
- {
- if(col[rt]!=-)
- {
- col[rt<<]=col[rt<<|]=col[rt];
- col[rt]=-;
- }
- }
- void update(int L,int R,int c,int l,int r,int rt)
- {
- if(L<=l&&r<=R)
- {
- col[rt]=c;
- return;
- }
- Pushdown(rt);
- int m=(l+r)>>;
- if(L<=m)update(L,R,c,lson);
- if(m<R)update(L,R,c,rson);
- }
- void query(int l,int r,int rt)
- {
- if(l==r)
- {
- if(col[rt]!=-)
- {
- if(!has[col[rt]])ans++;
- has[col[rt]]=true;
- }
- return;
- }
- Pushdown(rt);
- int m=(l+r)>>;
- query(lson);
- query(rson);
- }
- int main()
- {
- int T,n;
- scanf("%d",&T);
- while(T--)
- {
- scanf("%d",&n);
- int nn=;
- for(int i=;i<=n;i++)
- {
- scanf("%d%d",&le[i],&ri[i]);
- X[nn++]=le[i];
- X[nn++]=ri[i];
- }
- sort(X,X+nn);
- int m=;
- for(int i=;i<nn;i++)
- if(X[i]!=X[i-])X[m++]=X[i];
- for(int i=m-;i>;i--)
- if(X[i]!=X[i-]+)X[m++]=X[i-]+;
- sort(X,X+m);
- FILL(col,-);
- for(int i=;i<=n;i++)
- {
- int l=bin(le[i],m,X);
- int r=bin(ri[i],m,X);
- update(l+,r+,i,,m,);
- }
- ans=;FILL(has,false);
- query(,m,);
- printf("%d\n",ans);
- }
- }
poj2528(线段树)的更多相关文章
- poj-2528线段树练习
title: poj-2528线段树练习 date: 2018-10-13 13:45:09 tags: acm 刷题 categories: ACM-线段树 概述 这道题坑了我好久啊啊啊啊,,,, ...
- poj2528(线段树+离散化)Mayor's posters
2016-08-15 题意:一面墙,往上面贴海报,后面贴的可以覆盖前面贴的.问最后能看见几种海报. 思路:可以理解成往墙上涂颜色,最后能看见几种颜色(下面就是以涂色来讲的).这面墙长度为1~1000 ...
- POJ2528+线段树
见代码. /* 线段树+Lazy 题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度. 现在往墙上贴N张海报,每张海报的宽度是任意的,但是必定是单位宽度的整数倍,且<=1QW. 后贴的海 ...
- POJ2528 线段树的区间操作
首先应该对该[0,10000000]进行离散化 即先将点集进行排序,然后从小到大缩小其中的间距,使得最后点数不会超过2*n 然后就是线段树操作 只需进行染色,然后最后用nlgn进行一个个查询颜色记录即 ...
- poj2528 线段树+离散化 (倒序)
The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign h ...
- poj2528线段树解题报告,离散化+线段树
题目网址:http://poj.org/problem?id=2528 题意: n(n<=10000)个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=1 ...
- poj2528(线段树区间替换&离散化)
题目链接: http://poj.org/problem?id=2528 题意: 第一行输入一个 t 表 t 组输入, 对于每组输入: 第一行 n 表接下来有 n 行形如 l, r 的输入, 表在区 ...
- POJ2528线段树基础
開始就直接用延迟标记搞了下.最后发现内存肯定会爆了.数据太大了. 问了瓜神,原来应该用离散化来做这题,详细见凝视 #include <cstdio> #include <cstrin ...
- POJ2528线段树段更新逆序异或(广告牌)
题意: 可以这样理解,有一条直线,然后用n条线段去覆盖,最后问全部都覆盖完之后还有多少是没有被完全覆盖的. 思路: 一开始想的有点偏,想到起点排序,然后..失败了,原因是忘记了题目 ...
- poj2528 线段树+离散化
由于坐标可能很大,此时需要离散化,将值转化为对应的坐标. #include<stdio.h> #include<algorithm> using namespace std; ...
随机推荐
- 手机端viewport的设置规范
<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale ...
- linux内核系统调用--sendfile函数
在apache,nginx,lighttpd等webserver其中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile究竟是什么呢?它 ...
- unix ourhdr.h myerr.h
//在学UNIX环境高级编程时把下面两个头文件与源文件放在同一个文件下就可以正常编译了,我的是在ubuntu 12.04环境下,第一个程序编译和运行成功了,希望对大家有帮助(我已经根据网上的资料修改好 ...
- 在springmvc中配置jedis(转)
主要学习https://github.com/thinkgem/jeesite.一下代码均参考于此并稍作修改. 1.jedis 首先,需要添加jedis: <!--jedis--> < ...
- SQL server语句练习
相关表: <span style="white-space:pre">create table DEPT ( <span style="white-sp ...
- Qt之设置QWidget背景色(QStyleOption->drawPrimitive(QStyle::PE_Widget)方法比较有趣)
QWidget是所有用户界面对象的基类,这意味着可以用同样的方法为其它子类控件改变背景颜色. Qt中窗口背景的设置,下面介绍三种方法. 1.使用QPalette2.使用Style Sheet3.绘图事 ...
- 安装logstash,elasticsearch,kibana三件套(转)
logstash,elasticsearch,kibana三件套 elk是指logstash,elasticsearch,kibana三件套,这三件套可以组成日志分析和监控工具 注意: 关于安装文档, ...
- TFS2010安装与管理
整了几天TFS,把相关的一些配置与安装的要点简单记下,希望对大家有用.本篇主要是安装与配置上的内容,下一篇会介绍如何使用以及使用方面的相关心得体会. 本篇内容简要: 1. 安装部署 1.1. 流 ...
- Swift - 按钮(UIButton)的用法
1,按钮的创建 (1)按钮有下面四种类型: UIButtonType.ContactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 UIButtonType.DetailDisc ...
- Android Fragement学习笔记(三)----PreferenceFragment的使用
相信大家对Perference都比較熟悉了,也就是我们常说的偏好设置,首选项设置,能够保存一些数据,比如我们在上一次使用的时候的一些内容,希望在下一次启动后依旧生效,而不须要再进行配置那么麻烦.一般这 ...