樹狀陣列 單點修改,區間查詢

2022-05-07 04:06:11 字數 1199 閱讀 1897

本人水平有限,題解不到為處,請多多諒解

本蒟蒻謝謝大家**

題目:time limit: 10 sec  memory limit: 512 mb

submit: 231  solved: 78

[submit][status][web board]

給定數列 

a[1],a[2],…,a[n],你需要依次進行 q個操作,操作有兩類:

1 i x:給定 i,x將 a[i]加上 x;

2 l r:給定 l,r,求a[l]+a[l+1]+?+a[r] 的值)。

第一行包含 2 個正整數 n,q,表示數列長度和詢問個數。保證 1≤n,q≤10^6 。

第二行 n 個整數a[1],a[2],…,a[n],表示初始數列。保證 ∣a[i]∣≤10^6

接下來 q 行,每行乙個操作,為以下兩種之一:

1 i x:給定 i,x,將 a[i] 加上 x;

2 l r:給定 l,r,

保證 1≤l≤r≤n∣x∣≤10^6

對於每個 2 l r 操作輸出一行,每行有乙個整數,表示所求的結果。

3 2

1 2 3

1 2 0

2 1 3

6

模板樹狀陣列

code:

#include#pragma gcc optimize(3)

using

namespace

std;

typedef

long

long

ll;const

int maxn=1e6+5

;int

n,q;

ll c[maxn];

inline

intread()

while(isdigit(ch))

return x*f;

}int lowbit(int

x)void add(int x,int w)//

在x位置加上w

}ll

get(int x)//

求區間a[1~x]的和return sum(r)-sum(l-1)

return

cnt;

}int

main()

return0;

}

樹狀陣列 單點修改區間查詢

樹狀陣列,時間複雜度o mlogn 明顯優於暴力列舉以及字首和,主要用於單點修改區間查詢 當然還有區間修改單點查詢 如果一道題中只有區間查詢,那麼建議使用字首和維護 思想直接理解不好理解,借助資料 a陣列下標12 3456 78數值2 5632 714以上是我們要儲存的a陣列,就是原資料 b陣列下標...

樹狀陣列(單點修改區間查詢)

lowbit是用來取出二進位制中最低位數的1所代表的二進位制的值。只需要記下 就行了 int lowbit int x 將乙個樹的最子節點修改,則其父節點也需要更改,父父節點也需要修改。x x lowbit x 就是用來取出其父節點的。void add int x,int k 能查詢原陣列的字首和,...

樹狀陣列 1 單點修改,區間查詢

這是一道模板題。給定數列 a 1 a 2 a n 你需要依次進行 q 個操作,操作有兩類 1 i x 給定 i,x,將 a i 加上 x 2 l r 給定 l,r,求 ri la i 的值 換言之,求 a l a l 1 a r 的值 第一行包含 2 個正整數 n,q,表示數列長度和詢問個數。保證 ...