AcWing 242. 一個簡單的整數問題(樹狀陣列解法)
題意
給定長度為N的數列A,然後輸入M行操作指令。
第一類指令形如“C l r d”,表示把數列中第l~r個數都加d。
第二類指令形如“Q X”,表示詢問數列中第x個數的值。
對於每個詢問,輸出一個整數表示答案。
分析
如果這題不是使用線段樹,而是使用樹狀陣列來解決,怎麼做呢?怎麼思考呢?
樹狀陣列僅支援單點修改和區間查詢,但這題是要求區間修改和單點查詢,好像跟樹狀陣列反著來的。。。
仔細觀察一下,其實把A[l]到A[r]都加d,就是把l到r這個區間中的數都加d, r+1到n這個區間中的數都減d,因此可以使用一個額外陣列B來維護區間的變化, 至於查詢第x個數,就是A[x]+ B[1]~B[x]
注意
這題序列元素的範圍是10億,因此有些變數需要使用long long
程式碼
#include <iostream>
#include <cstring>
#define ll long long
using namespace std;
const int N = 1e5 + 5;
//a為儲存資料的陣列,b為樹狀陣列
ll a[N];
int b[N];
//n為序列長度,m為操作指令次數
int n, m;
//lowbit操作
int lowbit(int x) {
return x & -x;
}
//區間查詢
ll sum(int x) {
ll ans = 0;
while (x) {
ans += b[x];
x -= lowbit(x);
}
return ans;
}
//單點修改
void add(int x, int v) {
while (x <= n) {
b[x] += v;
x += lowbit(x);
}
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);//輸入序列
while (m--) {
char op[2];
scanf("%s", op);
if (op[0] == 'C') {
int l, r, d;
scanf("%d%d%d", &l, &r, &d);
//b[l]加d,相當於a[l]~a[n]都加d
add(l, d);
//b[r + 1]減d,相當於a[r + 1]~a[n]都減d
add(r + 1, -d);
} else {
int x;
scanf("%d", &x);
printf("%lld\n", a[x] + sum(x));
}
}
}
相關文章
- 樹狀陣列模板題 & (樹狀陣列 1:單點修改,區間查詢)陣列
- 【Leetcode每日一題】327. 區間和的個數(線段樹/樹狀陣列)LeetCode每日一題陣列
- 【陣列】1539. 第 k 個缺失的正整數(簡單)陣列
- 求區間不同數的個數【樹狀陣列求解】陣列
- 洛谷題單指南-二叉堆與樹狀陣列-P3368 【模板】樹狀陣列 2陣列
- 樹狀陣列陣列
- 樹狀陣列模板+習題集陣列
- 輸入一個整數陣列,輸出奇偶數相間排列的陣列陣列
- 解析樹狀陣列陣列
- 【陣列】1550. 存在連續三個奇數的陣列(簡單)陣列
- 樹狀陣列入門(簡單的原理講解)陣列
- 一個簡單的統計問題(解決方案:Trie樹)
- LeetCode每日一題: 陣列形式的整數加法(No.989)LeetCode每日一題陣列
- python List,它不是一個簡單的陣列Python陣列
- 二維樹狀陣列陣列
- 樹狀陣列詳解陣列
- 樹狀陣列基礎陣列
- POJ3468 A Simple Problem with Integers---樹狀陣列(區間問題)陣列
- HNOI2016網路(整體二分+樹狀陣列)陣列
- 【陣列】1394. 找出陣列中的幸運數(簡單)陣列
- 樹狀陣列快速入門陣列
- 樹狀陣列和逆序對陣列
- 【筆記/模板】樹狀陣列筆記陣列
- 簡單介紹最新python 字串陣列互轉問題Python字串陣列
- 陣列[簡單]1550. 存在連續三個奇數的陣列2020/11/14(6)陣列
- Leetcode 327. 區間和的個數 (字首和 + 離散化 + 樹狀陣列)LeetCode陣列
- 一組簡單一點的題目(六) T – 整數解
- 樹狀陣列(BIT)—— 一篇就夠了陣列
- 面試演算法題(4)--將一個整數陣列中的所有奇數放到偶數前面面試演算法陣列
- 給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。陣列
- 尋找兩個正序陣列的中位數問題,方法一:合併陣列檢索法陣列
- HDU 1556【區間更新+單點查詢 樹狀陣列】陣列
- POJ-2352 Stars(樹狀陣列)陣列
- 樹狀陣列(我是真小白)陣列
- 資料結構——樹狀陣列資料結構陣列
- 樹狀陣列3種基本操作陣列
- 陣列的七個 API 的簡單實現陣列API
- 給定一個整數陣列,找出總和最大的連續數列,並返回總和。陣列