Color the ball(线段树)
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11355 Accepted Submission(s): 5655
个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <=
b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜
色了,你能帮他算出每个气球被涂过几次颜色吗?
当N = 0,输入结束。
/*time memy
780ms 9132k
by orc
2015 4 15
*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 120005;
int n,qans;
struct node{
int lt,rt,val;
int add;
}s[4 * N]; void build(int v,int l,int r)
{
s[v].lt = l;
s[v].rt = r;
s[v].val = 0;
s[v].add = 0;
if(l == r) return;
int m = (l + r) >> 1;
build(v * 2, l, m);
build(v * 2 + 1, m + 1, r);
}
void update(int v,int l,int r)
{
if(s[v].lt == l && s[v].rt == r)
{ s[v].add += 1; return; }//只记录增量,本身先不加,待下次查询的时候先加
if(s[v].add)
{
s[2 * v].add += s[v].add;
s[2 * v + 1].add += s[v].add;
s[v].val += s[v].add * (s[v].rt - s[v].lt + 1);
s[v].add = 0;
}
int m = (s[v].lt + s[v].rt) >> 1;
if(r <= m) update(2 * v, l, r);
else if(l > m) update(2 * v + 1, l, r);
else {
update(2 * v, l, m);
update(2 * v + 1, m + 1, r);
}
}
void query(int v,int l,int r)
{
if(s[v].add)//查询的时候先看看增量,并传递
{
s[2 * v].add += s[v].add;
s[2 * v + 1].add += s[v].add;
s[v].val += s[v].add * (s[v].rt - s[v].lt + 1);//先把自身的增量加到自身
s[v].add = 0;
}
if(s[v].lt == l && s[v].rt == r)
{ qans += s[v].val; return; }
int m = (s[v].lt + s[v].rt) >> 1;
if(r <= m) query(2 * v, l, r);
else if(l > m) query(2 * v + 1, l, r);
else {
query(2 * v, l, m);
query(2 * v +1, m + 1, r);
}
}
void solve()
{
build(1, 1, n);
qans=0;
int a,b;
for(int i = 0;i < n; ++i)
{
cin>>a>>b;
update(1, a, b);
}
for(int i = 1;i < n; ++i){
qans=0;
query(1, i, i);
cout<<qans<<' ';
}
qans=0;
query(1, n, n);
cout<<qans<<endl;
}
int main()
{
std::ios::sync_with_stdio(0);
while(cin>>n && n)
solve();
return 0;
}
Color the ball(线段树)的更多相关文章
- HDU.1556 Color the ball (线段树 区间更新 单点查询)
HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...
- HDU 1556 Color the ball(线段树区间更新)
Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...
- hdu 1556 Color the ball (线段树+代码详解)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 1556 Color the ball(线段树区间维护+单点求值)
传送门:Color the ball Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/3276 ...
- ZOJ 2301 Color the Ball 线段树(区间更新+离散化)
Color the Ball Time Limit: 2 Seconds Memory Limit: 65536 KB There are infinite balls in a line ...
- HDU 1556 Color the Ball 线段树 题解
本题使用线段树自然能够,由于区间的问题. 这里比較难想的就是: 1 最后更新须要查询全部叶子节点的值,故此须要使用O(nlgn)时间效率更新全部点. 2 截取区间不能有半点差错.否则答案错误. 这两点 ...
- Color the ball (线段树的区间更新问题)
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...
- hdu 1556 Color the ball 线段树
题目链接:HDU - 1556 N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气 ...
- Color the ball 线段树 区间更新但点查询
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...
- hdu1556 Color the ball 线段树区间染色问题
都是老套路了,如果n=5,要把区间[1,4]染色,可以递归去染区间[1,3]和区间[4,4],如果区间相等就自加,不相等继续递归寻找对应区间. 打印结果时,把所有到达叶节点包含i的区间值相加,就是最后 ...
随机推荐
- (EM算法)The EM Algorithm
http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html http://blog.sina.com.cn/s/blog_a7da ...
- IOS- 堆和栈 详解
Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,即release 栈由编译器管理自动释放的,在方法中(函数体)定义的变量通常是在栈内,因此如果你的变量要跨函数的话就 ...
- ios tableview 适配横竖屏
tableview.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
- 清除Windows系统桌面快捷方式小箭头
清除Windows桌面快捷方式小箭头,需要重启,且不会导致软件无法锁定到任务栏.新建.reg的注册表文件,命名随意,内容如下: Windows Registry Editor Version 5.00 ...
- elk安装(这个是初级的可以把这个套件安上)
http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html ELK其实并不是一款软件,而是一整套解决方案,是三个开源软件Elastics ...
- RecyclerView导入依赖包
1. eclipse 上的导入: 如下进入Android SDK的如下路径, \android-sdk\extras\android\m2repository\com\android\support\ ...
- Dapper.NET 使用简单举例
概述 Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的.也就是说实体类都要自己写.它没有复杂的配置文件,一个单文 ...
- centos(x86 64位系统)使用boost
1. 安装gcc,g++,make等开发环境 yum groupinstall "Development Tools" 2. 安装boost yum install boost b ...
- Effective C++ 之 Item 1: 视C++为一个语言联邦
Effective C++ Chapter 1. 让自己习惯C++(Accustoming Yourself to C++) Item 1. 视C++为一个语言联邦(View C++ as a fed ...
- Request和Response对象
Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏 ...