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國都掌握的一清二楚,每個工兵營地的人數都有可能發生...