题意:在墙上贴一堆海报(只看横坐标,可以抽象成一线段),新海报可以覆盖旧海报。求最后能看到多少张海报

sol:线段树成段更新。铺第i张海报的时候更新sg[i].x~sg[i].y这一段为i。

   然而坐标范围有点大,还是加上离散化更靠谱些。

注意每组数据要清空数组,因为忘了清空WA了两发,太可惜了-_-||

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct
{
int l,r;
int dat;
}t[];
struct
{
int x,y;
}sg[];
char ch;
int md,num,ans,T,N,nnd;
bool v[];
int X[]; //建树:
void build(int l,int r,int o)
{
if (o>num) num=o;
t[o].l=l; t[o].r=r;
if (l==r)
t[o].dat=;
else
{
int mid=(l+r)/;
build(l,mid,*o);
build(mid+,r,*o+);
t[o].dat=;
}
} //push_down:(向下更新一层)
void push_down(int o)
{
if ((t[o].dat!=)&&(t[o].dat!=md))
{
t[o<<].dat=t[o].dat;
t[o<<|].dat=t[o].dat;
t[o].dat=;
}
} //更新:cin>>ml>>mr>>md; update(ml,mr,1); ->令a[ml..mr]=md
void update(int l,int r,int o)
{
if (o>num) return;
int tl=t[o].l,tr=t[o].r;
if ((tl==l)&&(tr==r))
{
t[o].dat=md;
return;
}
else
{
int mid=(tl+tr)>>;
//if (tl==tr) return;
push_down(o);
if (r<=mid)
update(l,r,o<<);
else if (l>mid)
update(l,r,o<<|);
else
{
update(l,mid,o<<);
update(mid+,r,o<<|);
}
}
} void sum(int o)
{
if (o>num) return;
if (t[o].l!=t[o].r) push_down(o);
if (t[o].dat!=)
{
if (!v[t[o].dat])
{
v[t[o].dat]=true;
ans++;
}
return;
}
sum(o<<);
sum(o<<|);
} int Bin(int key,int n,int X[])
{
int l = , r = n - ;
while (l <= r)
{
int m = (l + r) >> ;
if (X[m] == key) return m;
if (X[m] < key) l = m + ;
else r = m - ;
}
return -;
} int main()
{
cin>>T;
while(T--)
{
cin>>N;
nnd=;
memset(t,,sizeof(t));
memset(v,,sizeof(v));
for(int i=;i<=N;i++)
{
scanf("%d%d",&sg[i].x,&sg[i].y);
X[nnd++]=sg[i].x;
X[nnd++]=sg[i].y;
}
sort(X,X+nnd);
int m=;
for(int i=;i<nnd;i++)
if(X[i]!=X[i-]) X[m++]=X[i];
sort(X,X+m); //for(int i=0;i<m;i++)
// cout<<i<<"-"<<X[i]<<" ";
//cout<<endl; num=;
build(,m,);
for(int i=;i<=N;i++)
{
int tx=sg[i].x,ty=sg[i].y;
//cout<<tx<<" "<<ty<<"--";
tx=Bin(tx,m,X)+; ty=Bin(ty,m,X)+;
//cout<<tx<<" "<<ty<<endl;
md=i;
update(tx,ty,);
}
ans=;
sum(); cout<<ans<<endl; }
return ;
}

/*

现在再看去年这时候整理的线段树模板真是一坨屎。。。。

*/

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. Picture POJ - 1177 线段树+离散化+扫描线 求交叉图像周长

    参考  https://www.cnblogs.com/null00/archive/2012/04/22/2464876.html #include <stdio.h> #include ...

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

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

  9. POJ 2528 线段树

    坑: 这道题的坐标轴跟普通的坐标轴是不一样的-- 此题的坐标轴 标号是在中间的-- 线段树建树的时候就不用[l,mid][mid,r]了(这样是错的) 直接[l,mid][mid+1,r]就OK了 D ...

随机推荐

  1. Inline Workers--Web workers without a separate Javascript file

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head&g ...

  2. String PK StringBuilder,传说就是传说,只有动手实验,才能得出确定的答案

    本机测试结果如下: 大部分情况下,string 性能并不比StringBuilder差,只有特殊情况才出现差异,并非 如前面有些朋友测试的结果哪样,只要使用StringBuilder 就一定比Stri ...

  3. 拒绝了对对象 'XXX' (数据库 'XXX',架构 'dbo')的 SELECT 权限

    2010-04-17 23:16 在IIS里测试ASP.NET网站时会遇到这样的问题(ASP.NET+SQL2005)我自己的解决方法是这样的: 1.打开SQL2005管理界面(没有安装SQLServ ...

  4. Unity 使用快速教程

    Unity是微软在CodePlex上的一个开源项目,可用于依赖注入.控制反转,类似Spring,下面是使用示例: 1.先来定义几个接口.类 namespace UnityTest { public i ...

  5. Android -- ActivityLifeCycleCallbacks

    ActivityLifeCycleCallbacks Application通过此接口提供了一套回调方法,用于让开发者对Activity的生命周期事件进行集中处理. 为什么用ActivityLifec ...

  6. GitHub: Windows 下的简单使用

    这段时间在博客园多了很多关于GitHub的文章,但是我的确没怎么看懂.不过这几天简单的看了写资料,亲身操作之后也有了一点体会.这算是最简单的GitHub入门了吧,基本全是鼠标操作.这也是这几天的总结, ...

  7. 使用Python 将shapefile导入mongodb

    使用Python 将shapefile导入mongodb 随着big data时代的到来,各个行业都在考虑能不能把big data的思路.方法引入进来,GIS行业也不能免俗. 下面就介绍一下如何将sh ...

  8. LiveSDK初始化/登录时失败的解决办法

    环境描述 Windows 8.1+VS 2013 Update3+Live SDK 5.6 Metro风格的程序,集成LIVE认证 问题描述 如下图,提示Null Reference的异常. 解决办法 ...

  9. Learning to Rank 之 listwise ranking

    详细文章: http://www.machinelearning.org/proceedings/icml2007/papers/139.pdf

  10. jquery里面的$(this)和this都什么时候用,有什么区别

    当你用的是jquery时,就用$(this),如果是JS,就用this $(this).html( $(this).html() + " BAM! " + i ); 这个里的htm ...