樹狀陣列 改點求段

2021-07-26 05:34:38 字數 1095 閱讀 9522

改點求段是樹狀陣列中最簡單的,它只改變某個點,然後求某一段。

獲得x的管理範圍:

int lowbit(int x) 

給x加上k:

(不停地找上司,不停地改變,直到到了頭)

void add(int x,int k)

}

求1-x所以元素的值的和:

(不停地剩下那段的最高上司,不停地累加,直到到了頭)

int getsum(int x)

return s;

}

如果要求x-y的元素的值的和呢?

ans=getsum(y)-getsum(x-1);

在整數座標0<=x,y<=32000上有很多星星,每顆星的級別等於不比它高不比它右的星星數目,給出每顆星星的座標。

【輸入格式】

第一行包含乙個數 n (1<=n<=15000)。一下 n 行描述相應的星星(每行兩個用空格隔開的整數 x 和 y,(0<=x,y<=32000)。平面上每個座標最多只有乙個星星。星星按 y 的公升序排列,y 相等則按 x 的公升序排列。

【輸出格式】

輸出包含 n 行,每行乙個數。第一行包含級別為 0 的星星的總數,第二行是級別為1 的星星的總數,如此類推,最後一行是級別為 n-1 的星星的總數。

思路:要注意它是按順序輸入的,所以後輸進來的級別影響不了前面的,所以我們可以邊輸入邊判斷。在判斷時因為它是按 y 的公升序排列的,所以我們可以不用理 y ,只要以它的 x 給它作乙個統計即可。

#include#include#includeusing namespace std;

int c[32010],ss[15010];

int lowbit(int x)

int getsum(int x)

return s;

}void add(int x)

}int main()

for(int i=0;i推薦:《樹狀陣列—介紹》

《樹狀陣列—改段求段》

《樹狀陣列—改段求點》

樹狀陣列 段修改,點查詢

利用差分,先得到乙個差分序列 如 1,2,3,5 的差分序列為 1,1,1,2 當 i,j 段中所有數均加上數m時,在差分序列的i位置加上m,在j 1位置減去m即可 求和利用樹狀陣列 以下是pascal程式 var a,fai array 0.1000 of longint c char n,i,x...

hdu 4970 樹狀陣列 「改段求段」

題意 塔防。給1 n,給出m個塔,每個塔有攻擊力,給出k個怪獸的位子和血量,問有幾隻可以到達n點。今天剛剛複習了樹狀陣列,就碰到這個題,區間更新 區間求和型別。第三類樹狀陣列可以斬。注意一下大數即可。include include includeusing namespace std int64 t...

hdu 4970 樹狀陣列 「改段求段」

題意 塔防。給1 n,給出m個塔,每個塔有攻擊力,給出k個怪獸的位子和血量,問有幾隻可以到達n點。今天剛剛複習了樹狀陣列,就碰到這個題,區間更新 區間求和型別。第三類樹狀陣列可以斬。注意一下大數即可。include include includeusing namespace std int64 t...