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

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. 简单创建与布署CLR存储过程

    今天的博文是学习CLR存储过程,一个简单的例子,学会怎样创建,编译,布署在SQL中.CLR能做一些T-SQL无法做的事情,很多情况之后,它比T-SQL快. 打开VS2013,创建一个新专案,参考下面5 ...

  2. 【转】如何利用logrotate工具自动切分滚动中的日志文件

    FROM : http://www.2cto.com/os/201503/381812.html 在很多实际项目中,应用程序会持续写日志,如果程序代码中没有调用支持自动切分(如按filesize或da ...

  3. web一周

      学习web有一周了,老师进度有点小快,但是我还是感觉挺不错的.   对于一开始什么都不认识到能看懂是什么意思,并且可以写一些内容,我感觉还是比较欣慰,老师还是比较负责的,我每次都去找更远的代码学习 ...

  4. U3D 动画帧事件问题

    测试版本U3D5.4. 1,为一个模型导入外部动画.为动画剪辑attack在某帧添加event,事件为 public void OnAttackEvent(){},函数体不做任何事情. 结果发现,在动 ...

  5. Alpha版本项目展示要求

    Alpha版本展示的时间暂定为11月17日课上.如有变动,另行通知. 在Alpha阶段项目评审会上, 每个团队有12分钟展示时间,10分钟问答和机动时间,我们的展示也不需要PPT,大家把要展现的东西写 ...

  6. 分布式中使用Redis实现Session共享(一)

    上一篇介绍了如何使用nginx+iis部署一个简单的分布式系统,文章结尾留下了几个问题,其中一个是"如何解决多站点下Session共享".这篇文章将会介绍如何使用Redis,下一篇 ...

  7. Scala集合操作

    大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说: 1.数据集合:会涉及数据的搜集.存储等,搜集会有很多技术,存储技术现在比较经典方案是使用Hadoop,不过也很多方案采用Kafka.  ...

  8. Android开发之Fragment

    一.Fragment生命周期: 二.动态添加Fragment的三步: 1.获得Fragment的管理者FragmentManager FragmentManager fragmentManager = ...

  9. BroadcastReceiver之SD的挂载监听

    首先,新建一个类,继承于BroadcastReceiver,然后去配置Manifest.xml这就不用说了, 注意配置Manifest.xml时候的一些细节 必须加上<data android: ...

  10. 探索 SharePoint 2013 Search功能

    转载: http://www.cnblogs.com/OceanEyes/p/SharePont-2013-Search-Develop.html SharePoint 2013的搜索功能很强大,特别 ...