kb-07线段树-06离散化(与第四题类似)
/*
zoj1610
这题是离散化,区间特殊查询的,和之前的第4 题是异曲同工的
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node
{
int l,r,value;
}tr[]={};
int col[]={};
int c[]={};
int discrete[]={};
void build(int rt,int l,int r)
{
tr[rt].l=l;
tr[rt].r=r;
tr[rt].value=-;
if(l==r)
return ;
int mid=(l+r)/;
build(rt<<,l,mid);
build(rt<<|,mid+,r);
}
void Pushdown(int rt)
{
tr[rt<<].value=tr[rt<<|].value=tr[rt].value;
tr[rt].value=-;
}
void Update(int rt,int l,int r,int x)
{
if(tr[rt].value==x)
return ;
if(tr[rt].l>=l&&tr[rt].r<=r)
{
tr[rt].value=x;
return ;
}
if(tr[rt].value!=-)
Pushdown(rt);
if(l<=tr[rt<<].r)
{
if(r<=tr[rt<<].r)
Update(rt<<,l,r,x);
else
Update(rt<<,l,tr[rt<<].r,x);
}
if(r>=tr[rt<<|].l)
{
if(l>=tr[rt<<|].l)
Update(rt<<|,l,r,x);
else
Update(rt<<|,tr[rt<<|].l,r,x);
}
if(tr[rt<<].value==tr[rt<<|].value&&tr[rt<<].value!=-)
tr[rt].value=tr[rt<<].value;
}
int erfen(int l,int r,int x)
{
while(l<=r)
{
int mid=(l+r)/;
if(x<discrete[mid])
r=mid-;
else
l=mid+;
}
return r;
}
void Query(int rt)
{
if(tr[rt].value!=-)
{
for(int i=tr[rt].l;i<=tr[rt].r;i++)
col[i]=tr[rt].value;
return ;
}
if(tr[rt].l==tr[rt].r)
return ;
Query(rt<<);
Query(rt<<|);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
int a[][]={};
int t=;
memset(col,-,sizeof(col));
memset(c,,sizeof(c));
memset(tr,,sizeof(tr));
memset(discrete,,sizeof(discrete));
for(int i=;i<n;i++)
{
scanf("%d%d%d",&a[i][],&a[i][],&a[i][]);
discrete[t++]=a[i][];
discrete[t++]=a[i][];
}
sort(discrete,discrete+t);
int z=;
for(int i=;i<t;i++)
{
if(discrete[i]!=discrete[i-])
discrete[z++]=discrete[i];
}
for(int i=z-;i>;i--)
{
if(discrete[i]-discrete[i-]>)
discrete[z++]=discrete[i-]+;
}
sort(discrete,discrete+z);
for(int i=z;i>;i--)
{
discrete[i]=discrete[i-];
}
build(,,z+);
for(int i=;i<n;i++)
{
int ll=erfen(,z,a[i][]);
int rr=erfen(,z,a[i][]);
Update(,ll,rr-,a[i][]);
}
Query();
int temp=-;
for(int i=;i<=z;i++)
{
if(temp!=col[i])
{
c[col[i]]++;
temp=col[i];
}
}
for(int i=;i<=;i++)
{
if(c[i]>)
{
printf("%d %d\n",i,c[i]);
}
}
printf("\n");
}
return ;
}
kb-07线段树-06离散化(与第四题类似)的更多相关文章
- ACM/ICPC 之 数据结构-线段树+区间离散化(POJ2528)
这道题用线段树做更方便更新和查询,但是其数据范围很大,因此要将离散化和线段树结合起来,算是一道比较经典的线段树+离散化的例题. 线段树的离散化有很多方法,在这里,我先用一次结点离散化,间接将源左右端点 ...
- hdu1542 Atlantis (线段树+扫描线+离散化)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 【BZOJ-4653】区间 线段树 + 排序 + 离散化
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 107 Solved: 70[Submit][Status][Di ...
- 【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化
4636: 蒟蒻的数列 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 247 Solved: 113[Submit][Status][Discuss ...
- HDU 1542 Atlantis(线段树扫描线+离散化求面积的并)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- [HDOJ5877]Weak Pair(DFS,线段树,离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意:给一棵树和各点的权值a,求点对(u,v)个数,满足:1.u是v的祖先,2.a(u)*a(v ...
- HDU 1255 覆盖的面积 (线段树+扫描线+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意很清楚,就是让你求矩阵之间叠加层数大于1的矩形块的面积和. 因为n只有1000,所以我离散化 ...
- POJ-1151-Atlantis(线段树+扫描线+离散化)[矩形面积并]
题意:求矩形面积并 分析:使用线段树+扫描线...因为坐标是浮点数的,因此还需要离散化! 把矩形分成两条边,上边和下边,对横轴建树,然后从下到上扫描上去,用col表示该区间有多少个下边,sum代表该区 ...
随机推荐
- java面试题(杨晓峰)---第六讲谈谈动态代理是基于什么原理?
我在编译时不知道,而在运行时知道,那么肯定在运行时给了提示,这个提示就是额外功.好处是可以重复利用相同代码. 代理模式:通过代理静默的解决一些与业务无关的问题,例如远程,安全,事物,日志,资源关闭,. ...
- 如何处理错误消息Please install the gcc make perl packages
如何处理这行错误消息? Please install the gcc make perl packages from your distribution. 执行命令行:yum install gcc ...
- Spark源码分析之-Storage模块
原文链接:http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ Background 前段时间琐事颇多, ...
- 一些常用的HTML标签
由于本人目前没有系统学习,日常碰见哪个有用就记下来. pre标签 可定义预格式化的文本,在pre元素中的文本会保留空格和换行符.比如我们展示源代码的时候,只要放一个pre标签,然后把代码直接复制.粘贴 ...
- Jquery库插件大全(工作中遇到总结)
Jquery UI所有插件下载:http://jqueryui.com/download/all/ Jquery layer灯箱等演示与帮助:http://sentsin.com/jquery/lay ...
- 【转】如何在VC下检测当前存在的串口及串口热拔插
当我们在用VS进行串口编程时,在打开串口前,经常想知道当前PC上存在多少个串口,哪些串口可用?哪些串口已经打开了,最好是在一个Combo Box中列表系统当前所有可用的串口以供选择,然而如何获取系统当 ...
- 201621123080《Java程序设计》第三周学习总结
Week03-面向对象入门 1. 本周学习总结 2. 书面作业 1.以面向对象方式改造数据结构作业'有理数'(重点) 1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址. ...
- 【php】 phpword下载文件问题
这个问题是在 科锐国际 工作过程中发现的 word文档的名字(有汉字和空格)在windows系统上遍历是查不到文件的,但是在linux系统上市可以的压缩包里面的中文名word文档,如果出现汉字和空格, ...
- 【kindle】【转发】kindle链接WIFI自动断开问题
在电脑上新建一个新文件,名为“WIFI_NO_NET_PROBE”,同时把后缀名删掉,让它变成一个无格式文件.Kindle 连接电脑,把新建的文件放进Kindle的根目录,断开Kindle之后重启Ki ...
- HDU:4185-棋盘游戏
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Descri ...