POJ 2528 线段树
坑:
这道题的坐标轴跟普通的坐标轴是不一样的……
此题的坐标轴 标号是在中间的……
线段树建树的时候就不用[l,mid][mid,r]了(这样是错的)
直接[l,mid][mid+1,r]就OK了
Discuss里面的人们很纠结啊…….
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 22222
int cases,n,xx[N],yy[N],q[N],u,ans,vis[N];
struct Tree{int l,r,cover;}tree[N*4];
void build(int l,int r,int pos){
tree[pos].l=q[l],tree[pos].r=q[r],tree[pos].cover=0;
if(r==l)return;
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
build(l,mid,lson),build(mid+1,r,rson);
}
void push_down(int pos){
tree[pos<<1].cover=tree[pos<<1|1].cover=tree[pos].cover;
tree[pos].cover=0;
}
void insert(int l,int r,int pos,int L,int R,int id){
if(tree[pos].l>=L&&tree[pos].r<=R){
tree[pos].cover=id;return;
}
if(tree[pos].cover)push_down(pos);
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(tree[lson].r>=R)insert(l,mid,lson,L,R,id);
else if(tree[rson].l<=L)insert(mid+1,r,rson,L,R,id);
else insert(l,mid,lson,L,R,id),insert(mid+1,r,rson,L,R,id);
}
void query(int l,int r,int pos){
if(tree[pos].cover){if(!vis[tree[pos].cover])vis[tree[pos].cover]=1,ans++;return;}
if(l==r)return;
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
query(l,mid,lson),query(mid+1,r,rson);
}
int main(){
scanf("%d",&cases);
while(cases--){
memset(vis,0,sizeof(vis)),ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&xx[i],&yy[i]);
q[i*2-1]=xx[i],q[i*2]=yy[i];
}
sort(q+1,q+1+n*2);
u=unique(q+1,q+1+n*2)-q-1;
build(1,u,1);
for(int i=1;i<=n;i++){
insert(1,u,1,xx[i],yy[i],i);
}
query(1,u,1);
printf("%d\n",ans);
}
}
POJ 2528 线段树的更多相关文章
- poj 2528(线段树+离散化) 市长的海报
http://poj.org/problem?id=2528 题目大意是市长竞选要贴海报,给出墙的长度和依次张贴的海报的长度区间(参考题目给的图),问最后你能看见的海报有几张 就是有的先贴的海报可能会 ...
- poj 2528 线段树区间修改+离散化
Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...
- poj 2528 线段树+离散化
题意:在墙上贴一堆海报(只看横坐标,可以抽象成一线段),新海报可以覆盖旧海报.求最后能看到多少张海报 sol:线段树成段更新.铺第i张海报的时候更新sg[i].x~sg[i].y这一段为i. 然而坐标 ...
- POJ 2528 (线段树 离散化) Mayor's posters
离散化其实就是把所有端点放在一起,然后排序去个重就好了. 比如说去重以后的端点个数为m,那这m个点就构成m-1个小区间.然后给这m-1个小区间编号1~m-1,再用线段树来做就行了. 具体思路是,从最后 ...
- poj 2528 线段树 离散化的小技巧
题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:直接搞超时+超内存,需要离散化.离散化简单的来说就是只取我们需要的值来 用,比如说区间[1000,2000],[1990,2012] ...
- Mayor's posters POJ - 2528(线段树 + 离散化)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 74745 Accepted: 21574 ...
- Mayor's posters POJ - 2528 线段树区间覆盖
//线段树区间覆盖 #include<cstdio> #include<cstring> #include<iostream> #include<algori ...
- Mayor's posters POJ - 2528 线段树(离散化处理大数?)
题意:输入t组数据,输入n代表有n块广告牌,按照顺序贴上去,输入左边和右边到达的地方,问贴完以后还有多少块广告牌可以看到(因为有的被完全覆盖了). 思路:很明显就是线段树更改区间,不过这个区间的跨度有 ...
- poj 2886 线段树+反素数
Who Gets the Most Candies? Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 12744 Acc ...
随机推荐
- 虚拟化技术对照:Xen vs KVM
恒天云:http://www.hengtianyun.com/download-show-id-68.html 一.说明 本文主要从功能方面和性能方面对Xen和KVM对照分析,分析出其优缺点指导我们恒 ...
- java大数类,两个不超过20位都不为0的十进制字符串相乘,华为笔试题
import java.math.BigInteger; import java.util.*; import java.io.*; public class Main { public static ...
- rails数据库操作rake db一点心得
问题描述,对于很多的新手rails lover来说,搞定db是件头疼的事情,当建立了一个model,测试了半天发现我草列名写错了,再过一会儿发现association里面竟然没有xxx_id,这下子s ...
- png库结合zlib库使用出现的一个链接问题的解决
作者:朱金灿 来源:http://blog.csdn.net/clever101 要使用png库,首先得编译png库,要编译png库,得依赖zlib库的头文件.在使用png库读取一个png文件时,代码 ...
- RGB颜色值与十六进制颜色码转换工具
RGB颜色值转换成十六进制颜色码: 十六进制颜色码转换成RGB颜色值: 颜色码对照表 颜色 英文代码 形象描述 十六进制 RGB LightPink 浅粉红 #FFB6C1 255, ...
- 51nod 1717 好数 (水题)
题目: 看起来很复杂,其实就是有多少个素因子就翻转多少次. 然后考虑到只有平方数有奇数个素因子. 一次过,上代码把: #include <iostream> #include <al ...
- gui编程实战——qq聊天界面1
public class testDemo_2 extends JFrame{ JTextArea jta=null; //多行文本框组件 JScrollPane jsp=null; //滚动文本框 ...
- [转] CentOS 7 为firewalld添加开放端口及相关资料
转自http://www.cnblogs.com/hubing/p/6058932.html 1.运行.停止.禁用firewalld 启动:# systemctl start firewalld 查 ...
- 推荐几个bootstrap 后端UI框架
转载地址 https://blog.csdn.net/u013816448/article/details/81563051
- Collections库使用
Date: 2019-05-27 Author: Sun Collections库 Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collec ...