lowbit是用來取出二進位制中最低位數的1所代表的二進位制的值。
只需要記下**就行了
int
lowbit
(int x)
將乙個樹的最子節點修改,則其父節點也需要更改,父父節點也需要修改。x=x+lowbit(x)就是用來取出其父節點的。
void
add(
int x,
int k)
}
能查詢原陣列的字首和,時間複雜度為o(nlogn)
查出其中每個範圍內最父節點的值並相加
int
count
(int x)
return cnt;
}
#include
#include
#include
#include
#include
using
namespace std;
int sum[
500010];
int n,m;
intlowbit
(int x)
void
add(
int x,
int k)
}int
count
(int x)
return cnt;
}int
main()
for(
int j=
0;j)else
}return0;
}
樹狀陣列 單點修改區間查詢
樹狀陣列,時間複雜度o mlogn 明顯優於暴力列舉以及字首和,主要用於單點修改區間查詢 當然還有區間修改單點查詢 如果一道題中只有區間查詢,那麼建議使用字首和維護 思想直接理解不好理解,借助資料 a陣列下標12 3456 78數值2 5632 714以上是我們要儲存的a陣列,就是原資料 b陣列下標...
樹狀陣列 單點修改,區間查詢
本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 time limit 10 sec memory limit 512 mb submit 231 solved 78 submit status web board 給定數列 a 1 a 2 a n 你需要依次進行 q個操作,操作有兩類 ...
樹狀陣列 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,表示數列長度和詢問個數。保證 ...