由于坐标可能很大,此时需要离散化,将值转化为对应的坐标。

#include<stdio.h>
#include<algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 200010
int mark[maxn*],sum[maxn*],ans;
struct Node
{
int x;
int y;
}node[maxn];
int num[maxn*];
void pushup(int rt)
{
if(sum[rt<<]&&sum[rt<<|])
sum[rt]=;
else sum[rt]=;
}
void build(int l,int r,int rt)
{ if(l==r)
{
sum[rt]=;
return ;
}
int m=(l+r)/;
build(lson);
build(rson);
pushup(rt);
} void updata(int L,int R,int l,int r,int rt,int c)
{
if(sum[rt]) return ;
if(l>=L&&R>=r)
{
sum[rt]=;
if(!mark[c])
{
mark[c]=;
ans++;
return ;
}
return ;
}
int m=(l+r)/;
if(m>=L)
updata(L,R,lson,c);
if(R>m)
updata(L,R,rson,c);
pushup(rt);
}
int find(int val,int x,int y)
{
int l=x;
int r=y;
int m;
while(l<=r)
{
m=(l+r)/;
if(num[m]==val)
return m;
else if(num[m]>val)
r=m-;
else l=m+;
}
return -;
}
int main()
{
int i,t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int m=;
for(i=;i<n;i++)
{
scanf("%d%d",&node[i].x,&node[i].y);
num[m++]=node[i].x;
num[m++]=node[i].y;
}
sort(num+,num+m);
int k=;
//去重复
for(i=;i<m;i++)
{
if(num[i]!=num[i-])
num[k++]=num[i];
}
//防止相邻的出现问题
for(i=k-;i>;i--)
{
if(num[i]!=num[i-]+)
num[k++]=num[i-]+;
}
memset(mark,,sizeof(mark));
sort(num+,num+k);
build(,k-,);
ans=;
for(i=n-;i>=;i--)//倒着贴
{
int ll=find(node[i].x,,k-);
int rr=find(node[i].y,,k-);
updata(ll,rr,,k-,,i+);
}
printf("%d\n",ans);
}
}

poj2528 线段树+离散化的更多相关文章

  1. poj2528(线段树+离散化)Mayor's posters

    2016-08-15 题意:一面墙,往上面贴海报,后面贴的可以覆盖前面贴的.问最后能看见几种海报. 思路:可以理解成往墙上涂颜色,最后能看见几种颜色(下面就是以涂色来讲的).这面墙长度为1~1000 ...

  2. poj2528 线段树+离散化 (倒序)

    The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign h ...

  3. POJ2528 线段树离散化

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

  4. [poj2528] Mayor's posters (线段树+离散化)

    线段树 + 离散化 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayor ...

  5. poj-2528线段树练习

    title: poj-2528线段树练习 date: 2018-10-13 13:45:09 tags: acm 刷题 categories: ACM-线段树 概述 这道题坑了我好久啊啊啊啊,,,, ...

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

    Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...

  7. poj 2528 Mayor's posters(线段树+离散化)

    /* poj 2528 Mayor's posters 线段树 + 离散化 离散化的理解: 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显 ...

  8. [UESTC1059]秋实大哥与小朋友(线段树, 离散化)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1059 普通线段树+离散化,关键是……离散化后建树和查询都要按照基本法!!!RE了不知道多少次………………我真 ...

  9. poj 2528 Mayor's posters 线段树+离散化技巧

    poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...

随机推荐

  1. 怎样用Zbrush中的Curves Tubes创建手指

    之前我们已经能够初步完成了模型的人体躯干,今天的Zbrush教程将继续使用Curves Tubes创建手指,实现更细致的塑形.文章内容仅以fisker老师讲述为例,您也可以按照自己的想法,跟着老师的步 ...

  2. 怎样用ZBrush快速雕刻皮肤纹理

    今天的ZBrush教程我们将对利用基础笔刷制作出的“亡灵僵尸”头部模型进行皮肤纹理的处理,主要用到了Layers 3D图层和Alpha笔触类型添加皮肤纹理. 详细的视频教程地址可前往:http://w ...

  3. codeforces 711E E. ZS and The Birthday Paradox(数学+概率)

    题目链接: E. ZS and The Birthday Paradox. time limit per test 2 seconds memory limit per test 256 megaby ...

  4. HDU 5029 Relief grain --树链剖分第一题

    题意:给一棵树,每次给两个节点间的所有节点发放第k种东西,问最后每个节点拿到的最多的东西是哪种. 解法:解决树的路径上的修改查询问题一般用到的是树链剖分+线段树,以前不会写,后来学了一下树链剖分,感觉 ...

  5. 深入.NET框架 项目《魔兽登录系统》

    创建魔兽系统相关窗体: 登录窗体(frmLogin) 注册窗体(frmRegister) 主窗体   (frmMain) 实现魔兽登录系统: 登录的界面如下 实现思路: 1.创建一个对象数组,长度为1 ...

  6. 【从0到1】android网络框架的选型参考

    项目会使用到 socket tcp 级的网络访问,想选取一个使用较成熟异步网络框架, 提到的网络框架: 1. volley, 2. xutils. 3. android 4. netty, 5. mi ...

  7. RDP协议

    远程桌面协议 (RDP),用于终端服务器和终端服务器客户端之间的通信.RDP 被封装并在 TCP 加密. 远程桌面协议基于,并是对扩展 T 系列的协议标准. 多声道支持协议用于单独的虚拟通道储存的演示 ...

  8. mysqli_stmt预处理类的使用

  9. 【MFC】WM_GETMINMAXINFO 设置无边框窗口最大花不遮挡任务栏

    LRESULT OnGetMinMaxInfo( UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/ ) { ...

  10. Linux内核

    Linux内核配置.编译及Makefile简述 Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压 ...