今天剛剛接觸數壯陣列,大概的原理是理解了,不過理解的不是很透徹,也就是知其然,不知其所以然.所以把數狀陣列的基本操作暫時先記錄下來.等以後理解透徹之後在進一步的總結整理.
分兩中情況討論:
一.每次修改的是區間上的某個點,所求的是關於某個區間.
第乙個函式:
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...