Color the ball (线段树的区间更新问题)
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 (线段树的区间更新问题)的更多相关文章
- 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(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU.1556 Color the ball (线段树 区间更新 单点查询)
HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...
- HDU 1556 Color the ball(线段树:区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意: N个气球,每次[a,b]之间的气球涂一次色,统计每个气球涂色的次数. 思路: 这道题目用树状数组和 ...
- hdu 1698:Just a Hook(线段树,区间更新)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 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 ...
- hdu1698线段树的区间更新区间查询
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- zoj3686(线段树的区间更新)
对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a ...
- 线段树离散化+区间更新——cf1179C好题
绝对是很好的题 把问题转化成当第i个询问的答案是数值x时是否可行 要判断值x是否可行,只要再将问题转化成a数组里>=x的值数量是否严格大于b数组里的>=x的值 那么线段树叶子结点维护对于值 ...
随机推荐
- Arcgis Add-In开发入门实例
作为一个本科侧重于应用,工作之后却做了开发的程序员来说,做GIS,开发应该是一门必修课,只是,苦于各种原因吧,做GIS应用的人会开发的很少,做GIS开发的大部分都是计算机出身,痛心疾首啊-- 不好意思 ...
- vue动态 设置类名
<div class="tab"> <navigator :class="currentTab=='mzfw'?'nav active': 'nav'& ...
- 运用 jenkins 让你的项目优雅的持续化集成
0.到系统管理->系统设置 1.安装插件 Publish over SSH 2.配置 Publish over SSH 参数 1.pass 是私钥密码,此私钥文件放在安装 jenkins 的主机 ...
- UltraEdit工具安装和注册机破解
1.关闭网络连接(或者直接拔掉网线). 2.打开UltraEdit软件,稍等片刻会出现提示你你使用的是试用版本的窗口.如下图,点击“注册”. 3.填写许可证id和密码.许可证id可任意填写,不过根据经 ...
- fn project 试用之后的几个问题的解答
今天试用fnproject 之后自己有些思考,后面继续解决 1. 目前测试是强依赖 dockerhub 的,实际可能不是很方便 2. 如何与k8s .mesos.docker swarm 集成 ...
- nginx time_wait 较多优化
1. 查看命令 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 结果 ESTABLISHED 22 F ...
- Pod Installing openssl-ios-bitcode报错
pod update --no-repo-update 问题:执行上面的操作之后,pod在安装ssl的时候会报错.部分报错信息如下: localhost:OpenSSLTest Later$ pod ...
- FastAdmin + uni-app
FastAdmin + uni-app FastAdmin https://www.FastAdmin.net uni-app http://uniapp.dcloud.io/ 自己先挖个坑.
- mybatis-generator的坑
有天发现mybatis-generator不能用,要加什么根项目前缀, 搞到我重新从github下载,然后发现仓库用不了,原来新项目会改我的maven配置(新坑 后来终于明白要在子项目栏使用手脚架,就 ...
- [转]json-lib 的maven dependency
转载自http://www.cnblogs.com/yqskj/archive/2013/05/27/3101934.html 项目中要用到json-lib,mvnrepository.com查找它的 ...