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. 文化内涵和历史深度:PC
  2. Ubuntu10.04安装Flash插件
  3. 模板引擎-模板引擎渐进进化
  4. Pytorch固定随机性
  5. vivo U1正式亮相
  6. 文巾解题 1446. 连续字符
  7. HDU6223 - Infinite Fraction Path
  8. coturn的负载均衡特性_高性能负载均衡
  9. 论文浅尝 | 从知识图谱流中学习时序规则
  10. 数据库编程连接mysql_使用JDBC编程-连接MySQL数据库
  11. java的super_Java中的Super()
  12. Spring 配置文件
  13. nodejs,python,sublime和Eclipse的包管理器 1
  14. Vue:axios中POST请求传参问题
  15. 实战NSURLProtocol 拦截 APP网络请求NSURLConnection, NSURLSession, Alamofire
  16. 林期苏曼属性标签编辑_标签制作软件如何制作商品标签模板
  17. 第二代蜂窝移动通信系统概述
  18. PDF拆分页面的方法,如何拆分PDF页面
  19. 【Golang】go语言实现数据结构——堆
  20. 调用百度h5活体检测

热门文章

  1. JS实现App扫码网页端登录
  2. 基于Angularjs+jasmine+karma的测试驱动开发(TDD)实例
  3. 直接插入排序(内部排序)
  4. pycharm+itk+vtk安装及测试程序运行
  5. 【Leetcode】组合、排列、子集、切割(回溯模板和去重方法)
  6. [云炬创业基础笔记] 第四章测试6
  7. USTC English Club Note20171015(5)
  8. 燃烧学往年精选真题解析 2018-01-01
  9. mysql 查找密码忘记,Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
  10. Redis批量操作详解及性能分析