樹狀陣列基本操作

2021-06-22 11:26:53 字數 854 閱讀 7621

今天剛剛接觸數壯陣列,大概的原理是理解了,不過理解的不是很透徹,也就是知其然,不知其所以然.所以把數狀陣列的基本操作暫時先記錄下來.等以後理解透徹之後在進一步的總結整理.

分兩中情況討論:

一.每次修改的是區間上的某個點,所求的是關於某個區間.

第乙個函式:

int low_bit (int x)
這個函式主要是界定樹狀陣列(暫且這麼以為吧)的範圍;

例如:由函式可知 c1=a1;

c2=c1+a2=a1+a2;

c3=c3=a3;

c4=c2+c3+a4=a1+a2+a3=a4;

c5=a5;

c8=c4+c6+c7+a8=a1+a2+a3+a4+a5+a6+a7+a8;

第二個函式:

int sum (int i)

return ans;

i

這個函式是求1,2,3.......i 的區間和.

第三個函式:

void add (int i,int val)

}

這個函式主要是更新區間上i點的值加上val;

二.每次修改的是乙個區間,所求的值是關於某個點的.

這種情況和上面的那中情況基本上差不多,只要稍加改動即可;

第二個函式:

int sum (int i)

return ans;

}

第三個函式:

void add (int i,val)

}

樹狀陣列操作

題意 序列 n 1e6 有 m n 個詢問,求 l 到 r 中有幾個不相同的數。題解 如果 n 的範圍為 1e5 就是莫隊裸題,但是由於 n 的範圍為 1e6 那麼就是可用樹狀陣列操作,具體就是可發現,只有最後出現的數字有價值,設 r 指標從左到右,如果出現了乙個數之前沒出現過,在樹狀陣列裡此位置 ...

樹狀陣列 數列操作

題目描述 給定n個數列,規定有兩種操作,一是修改某個元素,二是求子數列 a,b 的連續和。數列的元素個數最多10萬個,詢問操作最多10萬次。輸入第一行2個整數n,m n表示輸入n個數列,m表示有m個操作 第二行輸入n個數列。接下來m行,每更好行有三個數k,a,b k 0表示求子數列 a,b 的和,k...

陣列基本操作

name 陣列基本操作 author 巧若拙 description 陣列基本操作 函式1 輸出陣列a中區域 low,high 的元素 函式2 在陣列a中查詢是否存在值為x的元素,若存在返回第乙個值為x的元素的下標,否則返回 1 函式3 統計陣列a中值為x的元素的數量 函式4 返回陣列a中區域 lo...