樹狀陣列 單點更新 區間查詢

2021-10-14 18:25:28 字數 1197 閱讀 9198

input

每組測試用例首先一行是2個正整數n和m(n<=100000,m<=10000),其中,n表示士兵的數量,m表示有m個詢問。

接下來一行是n個正整數,依次表示n位士兵cf的rating。其中,rating的取值範圍是小於等於5000。

最後是m行的詢問,每行包含2個正整數a和b,表示要計算從第a個士兵到第b個士兵的rating之和(1<=a, b<=n)。

output

每組資料輸出m行,分別表示m個詢問對應的rating之和。

sample input:

5 2

1500 1921 2134 1462 2403

1 32 5

sample output:

5555

7920

ac**

#include

using

namespace std;

#define max(a, b) ((a) > (b) ? (a) : (b))

#define inf 0x3f3f3f3f

typedef

long

long ll;

const

int maxn =

100005

;int a[maxn]

,c[maxn]

,n,m,u,v;

intlowbit

(int x)

intsum

(int i)

return ret;

}void

add(

int x,

int p)

}int

main

(int argc,

char

**ar**)

for(

int i=

1;i<=n;i++

)while

(m--

)printf

("%d\n"

,sum

(v)-

sum(u-1)

);//輸出區間和}}

return0;

}

樹狀陣列區間更新 區間查詢 單點查詢

為了更好地使用複雜度比線段樹更加優化的樹狀陣列,所以必須實現樹狀陣列的區間更新 樹狀陣列時間複雜度為o mlogn 實際用的時候優於線段樹,且寫得少。引入差分陣列,假設初始資料陣列為a,另a 0 0 設要維護的差分陣列為 d i a i a i 1 進一步可知 a i d 1 d 2 d i 即前i...

樹狀陣列的單點更新,區間查詢。

基本的陣列陣列概念,樹狀陣列利用其特殊的位置可以用二進位制達到log級別的更新,如下圖 核心 int sum int i return s void add int i,int x lowbit的作用是求出最低位的那個1,為什麼這樣可以求出來呢,是因為計算機中是採用補碼的方式來儲存數值型資料,所以負...

敵兵布陣(樹狀陣列的單點更新 區間查詢)

c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的一清二楚,每個工兵營地的人數都有可能發生...