hdu1556(树状数组小地方的解释~~~)
hdu 1556
Color the ball
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 25435 Accepted Submission(s): 12362
Problem Description
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
31 12 23 331 11 21 30
Sample Output
1 1 13 2 1
解析:起先的一般解法,就是开一个数组,记录每次a到b,s[i]++,最后再输出结果,超时,显然不能这么做
这时候就可以想到什么算法是可以更改区间值得呢?树状数组,时间是logn。
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#include<string>
#include<cstring>
#include<cmath>
#include<math.h>
using namespace std;const int maxn=100000+10;
int c[maxn];
int n,a,b;int lowbit(int x)
{return x&(-x);
}
void update(int i,int value)
{while(i>0){c[i]+=value;i-=lowbit(i);}
}
int getSum(int i)
{int sum=0;while(i<=n){sum+=c[i];i+=lowbit(i);}return sum;
}int main()
{while(~scanf("%d",&n),n){memset(c,0,sizeof(c));for(int i=0; i<n; i++){scanf("%d%d",&a,&b);update(b,1);//update(a,1)则update里面的i-=lowbit改为i+=lowbit且i<=n因为i-=lowbit是区间b到0递减的,//而i+lowbit是从n到a递减。通常我还是喜欢第一种。要是变为i+=lowbit则getSum也要改为i>0且i-=lowbit.update(a-1,-1);}for(int i=1; i<n; i++){printf("%d ",getSum(i));}printf("%d\n",getSum(n));}return 0;
}
hdu1556(树状数组小地方的解释~~~)相关推荐
- Color the ball(HDU1556)树状数组
每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...
- python 树状数组_树状数组(Binary Indexed Tree) 总结
1."树状数组"数据结构的一种应用 对含有n个元素的数组(a[1],...,a[k],...,a[n]): (1)求出第i个到第j个元素的和,sum=a[i]+...+a[j]. ...
- pojBuy Tickets2828线段树或者树状数组(队列中倒序插队)
这题开始的思路就是模拟:就像数组中插点一样,每一个想买票的人都想往前插队! 但是这样的话肯定TLE, 看了别人的思路之后才恍然大悟! 正解:将开始的正序插入,变成倒序插入,这样的话,想一想:第 i 个 ...
- 好骚气的树状数组的解释
引用请注明出处:http://blog.csdn.net/int64ago/article/details/7429868 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结.第一个接触 ...
- 花神游历各国 题解(小清新线段树/树状数组+并查集)
题面 众所周知,这是一道小清新线段树 然而可以用树状数组水过去且跑得飞快 看到区间开方第一反应肯定是线段树懒标记区间修改之类的,但是这个东西似乎确凿不可维护 所以考虑暴力循环单点修改->T飞 于 ...
- 小魂和他的数列(dp+树状数组优化)
链接:https://ac.nowcoder.com/acm/contest/3566/C 来源:牛客网 Sometimes, even if you know how something's goi ...
- Bzoj 4548: 小奇的糖果(双向链表+排序+树状数组)
以下内容来自ShallWe's Blog 题目 4548: 小奇的糖果 Description 有\(N\)个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能 ...
- 动态区间第k小:树状数组套权值线段树
所谓树状数组套权值线段树,就是在树状树组上套权值线段树 (逃) 解析 如何解决静态区间第k小? 使用主席树就ok啦 辣么如何解决动态区间第k小嘞- 我们想想主席树为啥不能解决动态区间第k小 因为如果改 ...
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...
最新文章
- 【Groovy】MOP 元对象协议与元编程 ( 通过 MetaMethod#invoke 执行 Groovy 方法 )
- centos nginx不是命令_虚拟机下Centos 8.0 安装PHP+Mysql+Nginx
- 错误信息:Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务
- java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
- Shell函数:Shell函数返回值、删除函数、在终端调用函数
- ios点击大头针气泡不弹出_iOS高德地图之自定义大头针and泡泡view
- 如何在jQuery的SELECT元素中选择特定选项?
- 【vs调试】PDB 文件:每个开发人员都必须知道的
- python的setdefault方法
- 交易者的量化程序化交易之路
- IE8升级IE11报错
- NetSetMan Pro(ip快速切换工具)官方中文版V5.1.0 | 电脑ip切换软件下载
- 基于java+swing的物业收费管理系统(java+swing+Gui)
- 音视频文件码率与文件大小计算公式
- 【贪玩巴斯】传感器与检测技术 (二)「半导体传感器基础」2021-09-30
- 什么软件可以测试皮肤色号,肤色测试卡怎么用?肤色测试卡的使用方法
- Android应用向su申请root权限,以及Superuser进行授权管理的原理浅析
- 微软Office Powerpoint双击打不开后的修复办法
- Ubuntu16.04、Ubuntu18.04、Ubuntu20.04分区方案
- php实现狼和兔子,兔子和狼作文4篇