復健1 樹狀陣列

2022-07-15 18:12:10 字數 589 閱讀 6051

當初學競賽的時候覺得樹狀陣列不好理解所以用線段樹水過了orz,所以復健先從這裡開始(((

首先需要明白lowbit:

lowbit(x)是x的二進位制表示式中最低位的1所對應的值。

比如,6的二進位制是110,所以lowbit(6)=2。

其中lowbit有兩種不同的寫法

int lowbit (int x)
以及

int lowbit(int x)

由於所有正整數都可以用二進位制表示,利用lowbit可以找出x中包含的最小二進位制數,我們利用每個二進位制數節點來存子段字首和

核心**:

void add(int x,int y)
int ask(int x)
洛谷3374 樹狀陣列1最基本的單點修改&&區間查詢

洛谷3368 樹狀陣列2當需要區間修改&&單點查詢的時候只需要維護乙個差分陣列即可

樹狀陣列1 樹狀陣列入門

仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...

模板 樹狀陣列1

這篇是樹狀陣列模板1 主要內容有 1.將某數加上x 2.求某區間和 也就是說支援單點修改 關於樹狀陣列的部落格講解 見基本介紹 include include include using namespace std define in read typedef long long ll const ...

樹狀陣列例題1

如題,已知乙個數列,你需要進行下面兩種操作 1.將某乙個數加上x 2.求出某區間每乙個數的和 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3個整數,表示乙個操作,具體如下 操作1 格式 1 ...