1.spa
從二進制下能夠看出到某一點的前綴和爲idx不斷去掉一個'1'造成的新索引下的區間和,獲取最後一個'1'code
int lowbit(int x) { return x&(-x); }
2.blog
查詢[L,R]之間的和索引
sum(R)-sum(L-1)it
單次查詢次數=log2(10^5)=17class
單次查詢時間複雜度:O(logN)二進制
int sum(int x) { int res = 0; for (; x; x -= lowbit(x)) { res += tree[x]; } return x; }
3.單點更新查詢
void add(int x, int v) { for (; x <= MaxVal; x += lowbit(x)) { tree[x] += v; } }
單次查詢次數=log2(10^5)=17di
單次查詢時間複雜度:O(logN)時間