N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?

Input每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。
当N = 0,输入结束。Output每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。Sample Input

3
1 1
2 2
3 3
3
1 1
1 2
1 3
0

Sample Output

1 1 1
3 2 1

题意:长度为n的区间,n次更新,每一次都将该区间的气球的颜色染一次色,问最终每一个气球染了几次色。

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=2e5+;
typedef long long ll;
#define lson l,m,i<<1
#define rson m+1,r,i<<1|1
typedef struct Node
{
ll l,r;
ll mid()
{
return (l+r)/2.0;
}
ll value;
} Node;
Node node[MAXN<<];
ll sum[MAXN<<];
ll add[MAXN<<];
void push_up(ll i)
{
sum[i]=sum[i<<]+sum[i<<|];
}
void Build(ll l,ll r,ll i)
{
node[i].l=l;
node[i].r=r;
node[i].value=;
sum[i]=;
add[i]=;
if(l==r)
{
sum[i]=;
node[i].value=;
return ;
}
ll m=node[i].mid();
Build(lson);
Build(rson);
push_up(i);
}
ll M;
void Push_down(ll i,ll len)
{
if(add[i])
{
add[i<<]+=add[i];
add[i<<|]+=add[i];
sum[i<<]+=add[i]*(len-(len>>));
sum[i<<|]+=add[i]*(len>>);
add[i]=;
}
}
void query(ll l,ll r,ll i)
{
if(node[i].l==l&&node[i].r==r)
{
M+=sum[i];
return;
}
ll m=node[i].mid();
Push_down(i,node[i].r-node[i].l+);
if(r<=m)
query(l,r,i<<);
else
{
if(l>m)
query(l,r,i<<|);
else
{
query(lson);
query(rson);
}
}
}
void update(ll l,ll r,ll i,ll v)
{ if(node[i].r==r&&node[i].l==l)
{
add[i]+=v;
sum[i]+=v*(r-l+);
return;
}
ll m=node[i].mid();
Push_down(i,node[i].r-node[i].l+);
if(r<=m)
update(l,r,i<<,v);
else
{
if(l>m)
update(l,r,i<<|,v); else
{
update(l,m,i<<,v);
update(m+,r,i<<|,v);
}
}
push_up(i);
}
int main()
{
ll m,n,a,b,T,c;
ll flag=;
while(scanf("%lld",&m)!=-&&m)
{
ll k=m;
Build(,m,);
while(k--)
{
scanf("%lld%lld",&a,&b);
update(a,b,,);
}
for(ll i=;i<=m;i++)
{
M=;
query(i,i,);
printf("%lld%c",M,i==m?'\n':' ');
}
}
return ;
}

题解:线段树的区间更新问题,上篇博客每行代码有详细解释。

Color the ball (线段树的区间更新问题)的更多相关文章

  1. ZOJ 2301 Color the Ball 线段树(区间更新+离散化)

    Color the Ball Time Limit: 2 Seconds      Memory Limit: 65536 KB There are infinite balls in a line ...

  2. hdu 1556:Color the ball(线段树,区间更新,经典题)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. HDU.1556 Color the ball (线段树 区间更新 单点查询)

    HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...

  4. HDU 1556 Color the ball(线段树:区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意: N个气球,每次[a,b]之间的气球涂一次色,统计每个气球涂色的次数. 思路: 这道题目用树状数组和 ...

  5. hdu 1698:Just a Hook(线段树,区间更新)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. UVA 12436-Rip Van Winkle's Code(线段树的区间更新)

    题意: long long data[250001]; void A( int st, int nd ) { for( int i = st; i \le nd; i++ ) data[i] = da ...

  7. hdu1698线段树的区间更新区间查询

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. zoj3686(线段树的区间更新)

    对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds      Memory Limit: 65536 KB Given a ...

  9. 线段树离散化+区间更新——cf1179C好题

    绝对是很好的题 把问题转化成当第i个询问的答案是数值x时是否可行 要判断值x是否可行,只要再将问题转化成a数组里>=x的值数量是否严格大于b数组里的>=x的值 那么线段树叶子结点维护对于值 ...

随机推荐

  1. C++轮子队-第三周(需求改进&原型设计)

    需求改进&原型设计 一.需求完善 (一)系统功能(补充) 图形界面(图片如下图所示:) 根据需求与组内讨论结果,现归纳图形界面方面需要的设计与相应功能: 数据-图形界面中间类: 数字方块类 N ...

  2. jdbc之防sql注入攻击

    1.SQL注入攻击:    由于dao中执行的SQL语句是拼接出来的,其中有一部分内容是由用户从客户端传入,所以当用户传入的数据中包含sql关键字时,就有可能通过这些关键字改变sql语句的语义,从而执 ...

  3. react-router-dom: 重定向默认路由

    <appLayout> <Switch> <Route path='/' exact render={()=> ( <Redirect to={this.ge ...

  4. request对象和response对象,什么时候用,具体用哪一个,没有感觉

    request对象和response对象,什么时候用,具体用哪一个,没有感觉

  5. 单项选择RadioButton和多项选择CheckBox的使用

     在Android中,可以通过RadioButton和RadioGroup的组合来实现单项选择的效果.而多项选择则是通过CheckBox来实现的. 1.单项选择RadioButton 我们知道,一 ...

  6. 程序员们,AI来了,机会来了,危机也来了

    程序员们,AI来了,机会来了,危机也来了 1.人工智能真的来了 纵观古今,很少有计算机技术能有较长的发展寿命,大部分昙花一现,比如:昔日的DOS.windows3.2.foxpro.delphi.80 ...

  7. Android 进阶8:进程通信之 Binder 机制浅析

    读完本文你将了解: IBinder Binder Binder 通信机制 Binder 驱动 Service Manager Binder 机制跨进程通信流程 Binder 机制的优点 总结 Than ...

  8. 利用Python进行文章特征提取(一)

    # 文字特征提取 词库模型(bag of words) 2016年2月26,星期五 # 1.词库表示法 In [9]: # sklearn 的 CountVectorizer类能够把文档词块化(tok ...

  9. Python基本特殊方法之__format__

    __format__()方法 __format__()传参方法:someobject.__format__(specification) specification为指定格式,当应用程序中出现&quo ...

  10. 智能电视软件安装(WIFI上网)

    智能电视软件上网(电视可连接无线网的称之为:智能电视) 1.安装当贝市场 链接:http://www.dangbei.com/ 2.安装电视家浏览器 链接:http://www.tvapk.net/f ...