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(树状数组小地方的解释~~~)相关推荐

  1. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  2. python 树状数组_树状数组(Binary Indexed Tree) 总结

    1."树状数组"数据结构的一种应用 对含有n个元素的数组(a[1],...,a[k],...,a[n]): (1)求出第i个到第j个元素的和,sum=a[i]+...+a[j]. ...

  3. pojBuy Tickets2828线段树或者树状数组(队列中倒序插队)

    这题开始的思路就是模拟:就像数组中插点一样,每一个想买票的人都想往前插队! 但是这样的话肯定TLE, 看了别人的思路之后才恍然大悟! 正解:将开始的正序插入,变成倒序插入,这样的话,想一想:第 i 个 ...

  4. 好骚气的树状数组的解释

    引用请注明出处:http://blog.csdn.net/int64ago/article/details/7429868 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结.第一个接触 ...

  5. 花神游历各国 题解(小清新线段树/树状数组+并查集)

    题面 众所周知,这是一道小清新线段树 然而可以用树状数组水过去且跑得飞快 看到区间开方第一反应肯定是线段树懒标记区间修改之类的,但是这个东西似乎确凿不可维护 所以考虑暴力循环单点修改->T飞 于 ...

  6. 小魂和他的数列(dp+树状数组优化)

    链接:https://ac.nowcoder.com/acm/contest/3566/C 来源:牛客网 Sometimes, even if you know how something's goi ...

  7. Bzoj 4548: 小奇的糖果(双向链表+排序+树状数组)

    以下内容来自ShallWe's Blog 题目 4548: 小奇的糖果 Description 有\(N\)个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能 ...

  8. 动态区间第k小:树状数组套权值线段树

    所谓树状数组套权值线段树,就是在树状树组上套权值线段树 (逃) 解析 如何解决静态区间第k小? 使用主席树就ok啦 辣么如何解决动态区间第k小嘞- 我们想想主席树为啥不能解决动态区间第k小 因为如果改 ...

  9. 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...

最新文章

  1. 【Groovy】MOP 元对象协议与元编程 ( 通过 MetaMethod#invoke 执行 Groovy 方法 )
  2. centos nginx不是命令_虚拟机下Centos 8.0 安装PHP+Mysql+Nginx
  3. 错误信息:Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务
  4. java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams
  5. Shell函数:Shell函数返回值、删除函数、在终端调用函数
  6. ios点击大头针气泡不弹出_iOS高德地图之自定义大头针and泡泡view
  7. 如何在jQuery的SELECT元素中选择特定选项?
  8. 【vs调试】PDB 文件:每个开发人员都必须知道的
  9. python的setdefault方法
  10. 交易者的量化程序化交易之路
  11. IE8升级IE11报错
  12. NetSetMan Pro(ip快速切换工具)官方中文版V5.1.0 | 电脑ip切换软件下载
  13. 基于java+swing的物业收费管理系统(java+swing+Gui)
  14. 音视频文件码率与文件大小计算公式
  15. 【贪玩巴斯】传感器与检测技术 (二)「半导体传感器基础」2021-09-30
  16. 什么软件可以测试皮肤色号,肤色测试卡怎么用?肤色测试卡的使用方法
  17. Android应用向su申请root权限,以及Superuser进行授权管理的原理浅析
  18. 微软Office Powerpoint双击打不开后的修复办法
  19. Ubuntu16.04、Ubuntu18.04、Ubuntu20.04分区方案
  20. php实现狼和兔子,兔子和狼作文4篇

热门文章

  1. java1.8 lambda进行并行运算
  2. nginx+lua (一)
  3. Sublime Less 自动编译成css
  4. Python 面向对象与 C++、Java 的异同
  5. ACM学习历程—Hihocoder [Offer收割]编程练习赛1
  6. easyui中的datagrid的数据加载的问题
  7. 转 Windows Mobile 开发工具和资源 黎波
  8. python 如何引用同一个目录下的另一个py文件
  9. 交替方向乘子算法(ADMM)
  10. 折半查找python实现