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

2021-10-21 23:37:57 字數 696 閱讀 1992

這是一道模板題。

給定數列 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,表示數列長度和詢問個數。保證 1≤n,q≤106。 第二行 n 個整數 a[1],a[2],…,a[n],表示初始數列。保證 |a[i]|≤106。

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

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

「2 l r」:給定 l,r,求 ∑ri=la[i] 的值。

保證 1≤l≤r≤n, |x|≤106。

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

#includeusing namespace std;

#define ll long long

ll lowbit(int n)

ll n,m;

ll a[1000010];

void add(ll l,ll r)

ll ask(ll x)

int main()

while(m--)

else

}}

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

樹狀陣列,時間複雜度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 能查詢原陣列的字首和,...

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

本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 time limit 10 sec memory limit 512 mb submit 231 solved 78 submit status web board 給定數列 a 1 a 2 a n 你需要依次進行 q個操作,操作有兩類 ...