hdu 1556
来源:互联网 发布:域名备案授权码 编辑:程序博客网 时间:2024/05/15 04:37
这题同样也是用树状数组去过,像上一篇写的一样,对于树状数组我们只需抽象出这样一个数组模型,对数组一段区间求和,并且数组元素的值会变化,就可以用树状数组进行加速,至于树状数组的结构和实现,可以先放一下。那么这题同样,给定一个区间(a,b),例如(1,3),我们只需在a[1]+1,a[4]-1,如果要查询3气球的涂色次数,然后将a[3]+a[2]+a[1]加起来即可。
抽象出来,就是对于 a b闭区间,遍历里面整数点一次,就是对a加1,对b+1减一,多次重复这个过程,当求某个点x遍历次数时,从a1加到ax既可 ,那么这个数组模型和树状数组所需那个底层数组一样,就可用树状数组加速。建议用手推一下这个过程,更加容易理解。
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1556
#include<cstdio>#include<cstring>#include<cstdlib>int n,a,b,c[1000000];int lowbit(int t){ return t&(-t);}void update(int pos,int num){ while(pos<=n) { c[pos]+=num; pos+=lowbit(pos); }}int sum(int num){ int sum=0; while(num>0) { sum+=c[num]; num-=lowbit(num); } return sum;}int main(void){ while(scanf("%d",&n)&&n) { memset(c,0,sizeof(c)); for(int i=0;i<n;i++) { scanf("%d%d",&a,&b); update(a,1); update(b+1,-1); } for(int i=1;i<n;i++) { printf("%d ",sum(i)); } printf("%d\n",sum(n)); } return 0;}
0 0
- hdu 1556
- hdu 1556
- HDU 1556
- hdu 1556
- hdu 1556
- hdu 1556
- hdu 1556
- (1556)HDU
- hdu 1556
- hdu 1556
- HDU 1556
- HDU 1556
- hdu--1556
- hdu 1556
- hdu 1556
- hdu:1556
- HDU 1556
- HDU 1556
- JavaScript中的变量和变量作用域
- epoll和input子系统实现input事件分发
- Android的Service全面总结
- FastDFS tracker 配置详解
- oracle分页 use JDBC
- hdu 1556
- Android中解析XML
- 第三章 45
- inline-block元素间的间隙问题
- linux读取按行读写文本文件
- BZOJ2190【莫比乌斯反演】【欧拉函数】
- ASCII,Utf8,Unicode编码下的中英文字符大小
- 杭电ACM1287——破译密码
- 微信公众平台java开发详解(工程代码+解析)