poj 2528 线段树+离散化
题意:在墙上贴一堆海报(只看横坐标,可以抽象成一线段),新海报可以覆盖旧海报。求最后能看到多少张海报
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 线段树+离散化的更多相关文章
- poj 2528(线段树+离散化) 市长的海报
http://poj.org/problem?id=2528 题目大意是市长竞选要贴海报,给出墙的长度和依次张贴的海报的长度区间(参考题目给的图),问最后你能看见的海报有几张 就是有的先贴的海报可能会 ...
- 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 ...
- poj 2528 线段树区间修改+离散化
Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...
- Mayor's posters POJ - 2528 线段树(离散化处理大数?)
题意:输入t组数据,输入n代表有n块广告牌,按照顺序贴上去,输入左边和右边到达的地方,问贴完以后还有多少块广告牌可以看到(因为有的被完全覆盖了). 思路:很明显就是线段树更改区间,不过这个区间的跨度有 ...
- Picture POJ - 1177 线段树+离散化+扫描线 求交叉图像周长
参考 https://www.cnblogs.com/null00/archive/2012/04/22/2464876.html #include <stdio.h> #include ...
- Mayor's posters POJ - 2528 线段树区间覆盖
//线段树区间覆盖 #include<cstdio> #include<cstring> #include<iostream> #include<algori ...
- POJ 2528 线段树
坑: 这道题的坐标轴跟普通的坐标轴是不一样的-- 此题的坐标轴 标号是在中间的-- 线段树建树的时候就不用[l,mid][mid,r]了(这样是错的) 直接[l,mid][mid+1,r]就OK了 D ...
随机推荐
- 您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧
转载至: http://www.cnblogs.com/Imaigne/p/4153397.html 您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mys ...
- Asp.net WebApi Put模式调用,“HTTP 错误 405.0 - Method Not Allowed”解决方法
IIS10.0在部署了WebAPI之后,默认是不支持Put模式调用的.需要按照下面方法启用. 步骤一:在IIS管理界面要支持Put模式的IIS站点,选择 "功能视图". 步骤二:选 ...
- STM32 控制红外线收发
买了一块STM32的板子,这次需要将IR的code移植到STM32上面,因为STM32成本比树莓派低得多,所以 一些简单的外设挂在STM32上就行了. 我买的板子的型号是STM32F103C8T6,价 ...
- php-fpm 启动参数及重要配置详解
约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...
- U-boot与linux的关系
基本上没有啥关系,U-boot的话你也知道,说白了就像是Dos工具箱,本身算是个精简的Linux系统了,主要是负责硬件的初始化和引导,本身带有一些工具,作为引导程序,常作为嵌入式设备的引导.当真正的系 ...
- [MCSM]随机搜索和EM算法
1. 概述 本节将介绍两类问题的不同解决方案.其一是通过随机的搜索算法对某一函数的取值进行比较,求取最大/最小值的过程:其二则和积分类似,是使得某一函数被最优化,这一部分内容的代表算法是EM算法.(书 ...
- Android Studio代码混淆插件
之前给公司的App添加代码混淆,在代码的混淆过程也遇到了不少的问题,再加上最近学习了一下Android Studio插件的开发,所以就开发一个代码混淆插件方便项目的代码混淆. 截图 第三方库列表清单 ...
- .Net分布式异常报警系统-项目介绍
后台管理 首页统计的是当天每个时段的异常数量, 使用的是echarts组件, 红框所示, 可以选择不同的系统进行查看. 得益于echarts的强大功能, 你可以使用柱状图来查看. 站 ...
- bootstrap点滴
1.nav-stacked 这个属性可以决定 tab的变为竖的,不添加的话为横向的. 2.tab 横向的 ul中必须含有nav nav-tabs ul li a 中必须有data-toggle=&q ...
- JPEG格式
Jpg文件格式[参考] 微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分.正序存放就是高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后.例如,十六 ...