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的区间值相加,就是最后 ...
随机推荐
- php图片防盗链的小测试
test.php <?php $txt = "http://hiphotos.baidu.com/stupidet/pic/item/4f1b8cfb4c33b7254e4aea69. ...
- Mysql之复制服务
Replication[复制]使得数据可以从一个Master服务器上复制到一个或多个Slave上,默认是异步复制,不需要与Master建立永久连接:基于配置,可以作用于所有库,指定的库或库中的某些表. ...
- Codeforces Round #324 (Div. 2) C (二分)
题目链接:http://codeforces.com/contest/734/problem/C 题意: 玩一个游戏,一开始升一级需要t秒时间,现在有a, b两种魔法,两种魔法分别有m1, m2种效果 ...
- NYOJ题目809摸底
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtEAAAI4CAIAAAAj4CIaAAAgAElEQVR4nO3drXLjTLeG4X0S4TmQYB
- Loadrunner之API测试
//API函数 web_submit_data web_custom_request //支持https请求 web_set_sockets_option("SSL_VERSION&qu ...
- mysql编码设置
一:mysql字符集 mysql的字符集支持(Character Set Support)有两个类型:字符集(Character set)和连接校对(Collation).对于字符集的支持细化到四个层 ...
- .net学习之委托和事件
1.什么是委托通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器上传图片: 2.委托语法准备一个方法:string Hello(string userName){} string ...
- ASP.NET MVC 伪静态的实现
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.Ignore ...
- 几年前做家教写的C教程(之一)
C语言学习宝典 首先让我们认识什么是C语言. C语言是一种计算机开发语言,是一种非常基础的开发语言.能够用C语言做很多事情.C语言是顺序执行的程序. 程序应该包括数据描述,数据操作. C语言的数据类型 ...
- GoLang文件增删遍历基本操作
先学一学GO语言实用的一面. package main import ( "path/filepath" "flag" "os" " ...