[专辑]树状数组[updating]
2012-09-08 20:59
169 查看
一般树状数组能做的线段树都能做,除非卡你空间。。。
1、单点更新+区间查询
POJ 2352 Stars
HDU 1394 Minimum Inversion Number
HDU 1166 敌兵布阵
2、区间更新+单点查询
这种跟第一种的树状数组维护已经不一样了,一个只pushup,维护区间的值正确。一个只pushdown,维护单点的值正确。
#define MAXN 100002
int a[MAXN];
int n; //线段 1~n
inline lowbit(int x) { return x&(-x); }
void update(int x, int v) //区间更新,[1, x] += v
{
while(x>0) //pushdown,更新到儿子
{
a[x] += v;
x -= lowbit(x);
}
}
int query(int x) //单点查询,sum of [x]
{
int ret = 0;
while(x<=n) //统计覆盖p点的区间。所有 [1, y], y>=x 的线段。
{
ret += a[x];
x += lowbit(x);
}
return ret;
}
HDU 1556 Color the ball
3、区间更新+区间查询
1、单点更新+区间查询
#define MAXN 100002 int a[MAXN]; int n; //线段 1~n inline lowbit(int x) { return x&(-x); } int getsum(int x) // 区间查询,sum[1, x] { int ret = 0; while(x>0) //合并区间 { ret += a[x]; x-=lowbit(x); } return ret; } void insert(int x, int v) //单点更新,[x] += v { while(x<=n) //pushup,更新到父亲 { a[x] += v; x += lowbit(x); } }
POJ 2352 Stars
HDU 1394 Minimum Inversion Number
HDU 1166 敌兵布阵
2、区间更新+单点查询
这种跟第一种的树状数组维护已经不一样了,一个只pushup,维护区间的值正确。一个只pushdown,维护单点的值正确。
#define MAXN 100002
int a[MAXN];
int n; //线段 1~n
inline lowbit(int x) { return x&(-x); }
void update(int x, int v) //区间更新,[1, x] += v
{
while(x>0) //pushdown,更新到儿子
{
a[x] += v;
x -= lowbit(x);
}
}
int query(int x) //单点查询,sum of [x]
{
int ret = 0;
while(x<=n) //统计覆盖p点的区间。所有 [1, y], y>=x 的线段。
{
ret += a[x];
x += lowbit(x);
}
return ret;
}
HDU 1556 Color the ball
3、区间更新+区间查询
相关文章推荐
- [专辑]树状数组[updating]
- 树状数组专辑
- POJ1990 MooFest(树状数组)
- nyoj 123 士兵杀敌(四)(树状数组——插线问点)
- poj 2352 Stars (树状数组 +1 的运用)
- uva 10869 - Brownie Points II(树状数组)
- Codeforces Round #348 E. Little Artem and Time Machine 树状数组 单点更新
- 【冒泡排序】树状数组 & 结论
- POJ2299 树状数组求逆序数
- hdu5124(树状数组+离散化)
- P3374 【模板】树状数组 1
- 树状数组核心代码
- HDOJ 1166 敌兵布阵(一维树状数组)
- 【树状数组】树状数组复习
- hdu2689 树状数组 逆序数
- hdu 4217 Data Structure? 树状数组求第K小
- 树状数组--敌兵布阵
- 树状数组求逆序数
- hdu1166 敌兵布阵 一维树状数组
- POJ1195--Mobile phones(树状数组)