简单基础树状数组 HDU 1556
来源:互联网 发布:淘宝店铺营销 编辑:程序博客网 时间:2024/06/15 18:28
HDU 1556:http://acm.hdu.edu.cn/showproblem.php?pid=1556
题目大意:给出一个N,表示数字从1到N,然后会给出N个区间,对N个区间作加1操作。最后分别输出N个数字,它们各自的值。N最大100000
简单的说,就是,区间更新,单点求值。
树状数组的功能,就是,向左走,是查询区间和;向右走,是更新单点值,而维护树状数组。
放假在家,思维僵硬。于是我有一个想法,如果将树状数组反过来用,就可以实现 向左走,更新区间值,而维护树状数组;向右走,是查询单点值。 结果可以过,小激动
实际上,还是 向左是对区间操作,向右是对单点操作。
其实还是基础题,裸的树状数组应用,可以用来加深对树状数组的理解。
接下来就上代码了,和普通的树状数组其实就是 add更新操作和 query查询操作变化一下啦。
#include "bits/stdc++.h"using namespace std;#define inf 100009#define INF 999999999#define ll long longint c[inf];int n;void init(){ memset(c,0,sizeof c);}int lowbit(int i){ return i&-i;}void add(int i,int tag) //区间1到n加tag{ while(i>0) { c[i]+=tag; i-=lowbit(i); }}ll query(int i){ ll sum=0; while(i<=n) { sum+=(ll)c[i]; i+=lowbit(i); } return sum;}int main(){ int i,a,b; while(~scanf("%d",&n)&&n) { init(); for(i=1;i<=n;i++) { scanf("%d%d",&a,&b); add(b,1); add(a-1,-1); } for(i=1;i<n;i++) printf("%lld ",query(i)); printf("%lld\n",query(i)); } return 0;}
阅读全文
1 0
- 简单基础树状数组 HDU 1556
- hdu 1541 树状数组简单
- hdu 3743 简单树状数组
- hdu 1556 树状数组
- hdu (1556 树状数组)
- HDU 1556 树状数组
- Hdu--1556--Color the ball(树状数组最简单运用)
- HDU-1556 Color the ball 简单树状数组
- Color the ball - HDU 1556 简单树状数组
- HDU 1556 Color the ball (树状数组简单应用)
- HDU 1556 Color the ball (简单树状数组)
- HDU-1541 树状数组(基础题)
- HDU 1166 树状数组 基础题
- hdu stars 简单的树状数组
- hdu 3874 Necklace【树状数组简单应用】
- hdu 1541 Stars【树状数组简单应用】
- hdu 1166 树状数组简单题
- hdu 3030 树状数组 简单 DP
- 为什么Collection不从Clone和Serializable接口继承
- 51nod 1732 51nod婚姻介绍所 后缀数组 + rmq
- Optional int parameter 'rip' is present but cannot be translated into a null value due to being decl
- Java获取客户端IP
- tomcat内存溢出的分析过程
- 简单基础树状数组 HDU 1556
- HDU 5130 Signal Interference (求圆与多边形相交面积 模板)
- 修改npm全局安装模式的路径
- Python美化文本内容
- thinkphp的学习笔记
- CentOS 6.3 安装过程
- “[SDOI2009] 晨跑”
- 使用Yii框架完整搭建网站流程入门
- 0731 Java数组