動態求連續區間和 線段樹 模板

2021-10-02 14:11:21 字數 1320 閱讀 6126

給定 n 個數組成的乙個數列,規定有兩種操作,一是修改某個元素,二是求子數列 [a,b]的連續和。

輸入格式

第一行包含兩個整數 n和 m,分別表示數的個數和操作次數。第二行包含 n個整數,表示完整數列。

接下來 m行,每行包含三個整數 k,a,b (k=0,表示求子數列[a,b]的和;k=1,表示第 a 個數加 b)。

數列從 1開始計數。

輸出格式

輸出若干行數字,表示 k=0時,對應的子數列 [a,b]的連續和。

資料範圍

1≤n≤100000,

1≤m≤100000,

1≤a≤b≤n

輸入樣例:

10 5

1 2 3 4 5 6 7 8 9 10

1 1 5

0 1 3

0 4 8

1 7 5

0 4 8

輸出樣例:

1130

35

線段樹也可以解決單點修改,區間查詢,結構體中可以是表示求和的sum,也可以是其他的,例如求最大值最小值,

#include

#include

using

namespace std;

int n,m;

int w[

100006];

struct nodeaa[

400006];

void

pushup

(int u)

void

build

(int u,

int l,

int r)

//根節點是u,在l-r之間建立線段樹

;else

;//首先對線段樹進行初始化

int mid=

(l+r)/2

;build

(u*2

,l,mid)

;build

(u*2+1

,mid+

1,r)

;//左右遞迴建立線段樹

pushup

(u);

//建立之後用子節點的資訊更新父節點}}

intquery

(int u,

int l,

int r)

//根節點是u,目標區間為l到r

void

modify

(int u,

int x,

int v)

}int

main()

return0;

}

C 動態求連續區間和(線段樹)

給定 n 個數組成的乙個數列,規定有兩種操作,一是修改某個元素,二是求子數列 a,b 的連續和。輸入格式 第一行包含兩個整數 n和 m,分別表示數的個數和操作次數。第二行包含 n個整數,表示完整數列。接下來 m行,每行包含三個整數 k,a,b k 0,表示求子數列 a,b 和 k 1,表示第 a 個...

動態求連續區間和 樹狀陣列與線段樹

樹狀陣列,這玩意吧,我也整不明白具體的原理,說的好聽點就是注重實踐,說不好聽點就是揹著這幾個函式會寫就行了 給定 n 個數組成的乙個數列,規定有兩種操作,一是修改某個元素,二是求子數列 a,b 的連續和。輸入格式 第一行包含兩個整數 n 和 m,分別表示數的個數和操作次數。第二行包含 n 個整數,表...

線段樹維護連續區間

在抗日戰爭期間,華北平原廣大地區進行了大規模的隧道戰。一般來說,通過隧道連線的村莊排成一列。除了兩端,每個村莊都與兩個相鄰的村莊直接相連。入侵者經常對一些村莊發動襲擊並摧毀其中的部分隧道。八路軍指揮官要求最新的隧道和村莊連線狀態。如果某些村莊嚴重隔離,必須立即恢復連線!input 輸入的第一行包含兩...