Range Update and Range Queries in BIT
来源:互联网 发布:盈建科软件教学视频 编辑:程序博客网 时间:2024/06/06 07:22
在树状数组中,如果涉及到区间更新,我们可以多维护一棵BIT2:
Update Query Update(BITree1, l, val)Update(BITree1, r+1, -val)UpdateBIT2(BITree2, l, val*(l-1))UpdateBIT2(BITree2, r+1, -val*r)Range Sum getSum(BITTree1, k) *k) - getSum(BITTree2, k)
/* * Binary Indexed Tree: Range Update & Rangre queries * Complexity: O(qlog(n)) (q:query times, n:size of BIT) * Mantain another BIT(BIT2) * * Update(l, r, val): Add 'val' to all elements in the array from [l, r]. * getRangeSum(l, r): Find sum of all elements in the array from[l, r]. * * Consider prefix sum: [1, k] * Case 1: k < l * Case 2: l <= k <= r * Case 3: k > r * */#include <bits/stdc++.h>using namespace std;const int MAXN = 100000 + 7;int n; // Size of BITint BIT1[MAXN], BIT2[MAXN];int lowbit(int x) { return x & (-x);}int getSum(int k, int BIT[]) { int sum = 0; while(k > 0) { sum += BIT[k]; k -= lowbit(k); } return sum;}// Update a node in BIT and all its' ancestorint update(int idx, int val, int BIT[]) { while(idx <= n) { BIT[idx] += val; idx += lowbit(idx); }}// Return the sum of array from [1, k].int sum(int k) { return (getSum(k, BIT1) * k) - getSum(k, BIT2);}void updateRange(int val, int l, int r) { update(l, val, BIT1); update(r+1, -val, BIT1); update(l, val * (l-1), BIT2); update(r+1, -val * r, BIT2);}int rangeSum(int l, int r) { return sum(r) - sum(l-1);}int main() { n = 5; int l = 1, r = 5, val = 5; updateRange(val, l, r); l = 2, r = 5, val = 10; updateRange(val, l, r); l = 1, r = 4; printf("%d\n", rangeSum(l, r)); return 0;}
阅读全文
0 0
- Range Update and Range Queries in BIT
- [leetcode][bit] Bitwise AND of Numbers Range
- Bit Manipulation - Bitwise AND of Numbers Range
- [hackerrank]Range Modular Queries
- Range Minimum Queries
- Difference between Range and Xrange in Python
- Range Minimum Queries (CodeChef ANDMIN )
- Posts Tagged 【bit】Bitwise AND of Numbers Range
- Range
- Range
- range
- range()
- Range
- range
- Range
- Range
- Range
- range
- Guetzli:谷歌开源新JPEG算法,可将文件缩小35%
- SpringCloud踩坑实战笔记(入门篇)
- javaweb4
- 跟任何人都聊得来—最受世界500强企业欢迎的沟通课(二)
- 本体结构介绍
- Range Update and Range Queries in BIT
- Struts2_动态方法调用
- Anaconda多环境多版本python配置指导
- mysql CMD命令行插入中文数据报错ERROR 1366
- 基于python的手写数字识别(KNN算法)
- Android SDK Manager和AVD Manager使用
- CSS-flex布局 笔记
- 使用ajax异步上传文件数组到后台服务器
- 《琴.殇》