坑:

这道题的坐标轴跟普通的坐标轴是不一样的……

此题的坐标轴 标号是在中间的……

线段树建树的时候就不用[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 线段树的更多相关文章

  1. poj 2528(线段树+离散化) 市长的海报

    http://poj.org/problem?id=2528 题目大意是市长竞选要贴海报,给出墙的长度和依次张贴的海报的长度区间(参考题目给的图),问最后你能看见的海报有几张 就是有的先贴的海报可能会 ...

  2. poj 2528 线段树区间修改+离散化

    Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...

  3. poj 2528 线段树+离散化

    题意:在墙上贴一堆海报(只看横坐标,可以抽象成一线段),新海报可以覆盖旧海报.求最后能看到多少张海报 sol:线段树成段更新.铺第i张海报的时候更新sg[i].x~sg[i].y这一段为i. 然而坐标 ...

  4. POJ 2528 (线段树 离散化) Mayor's posters

    离散化其实就是把所有端点放在一起,然后排序去个重就好了. 比如说去重以后的端点个数为m,那这m个点就构成m-1个小区间.然后给这m-1个小区间编号1~m-1,再用线段树来做就行了. 具体思路是,从最后 ...

  5. poj 2528 线段树 离散化的小技巧

    题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:直接搞超时+超内存,需要离散化.离散化简单的来说就是只取我们需要的值来 用,比如说区间[1000,2000],[1990,2012] ...

  6. Mayor's posters POJ - 2528(线段树 + 离散化)

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 74745   Accepted: 21574 ...

  7. Mayor's posters POJ - 2528 线段树区间覆盖

    //线段树区间覆盖 #include<cstdio> #include<cstring> #include<iostream> #include<algori ...

  8. Mayor's posters POJ - 2528 线段树(离散化处理大数?)

    题意:输入t组数据,输入n代表有n块广告牌,按照顺序贴上去,输入左边和右边到达的地方,问贴完以后还有多少块广告牌可以看到(因为有的被完全覆盖了). 思路:很明显就是线段树更改区间,不过这个区间的跨度有 ...

  9. poj 2886 线段树+反素数

    Who Gets the Most Candies? Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 12744   Acc ...

随机推荐

  1. unity3d 延迟运行脚本语句

    在Unity3D中.有yield语句它负责延迟操作,yield return WaitForSeconds(3.0); //等待 3 秒 查看unity3d脚本手冊,使用方法须要在对应的格式. 以下代 ...

  2. 关于Android的.so文件所须要知道的

    早期的Android系统差点儿仅仅支持ARMv5的CPU架构,你知道如今它支持多少种吗?7种. Android系统眼下支持以下七种不同的CPU架构:ARMv5.ARMv7 (从2010年起),x86 ...

  3. jquery时间格式化插件

    插件的代码: (function($){ $.formatDate = function(pattern,date){ //假设不设置,默觉得当前时间 if(!date) date = new Dat ...

  4. HDOJ 5299 Circles Game 圆嵌套+树上SG

    将全部的圆化成树,然后就能够转化成树上的删边博弈问题.... Circles Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...

  5. iOS学习必须了解的七大手势

    文章只要你有一点点基础应该就可以看的懂,文章只为学习交流 #import "ViewController.h" @interface ViewController () @prop ...

  6. 使用Swing组件编写一个支持中文文本编辑程序ChineseTextEdit.java

      import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class C ...

  7. BZOJ 3165 李超线段树

    思路: 李超线段树 我是把线段转成斜率的形式搞得 不知道有没有更简单的方法 //By SiriusRen #include <cmath> #include <cstdio> ...

  8. 阿里云ecs : Couldn't connect to host, port: smtp.aliyun.com, 25; timeout -1;

    上传到服务器后javamail发邮件异常 链接 原来是ECS基于安全考虑,禁用了端口25. 改成465就可以发邮件了. p.setProperty("mail.smtp.socketFact ...

  9. hiho152周 - 水题 区间问题

    题目链接 给定两个区间集合 A 和 B,其中集合 A 包含 N 个区间[ A1, A2 ], [ A3, A4 ], ..., [ A2N-1, A2N ],集合 B 包含 M 个区间[ B1, B2 ...

  10. Ncomputering 安装及参数设置

    1.加域 2.添加用户:系统属性---远程