模板線段樹

2022-08-17 16:48:23 字數 2700 閱讀 8723

來至洛谷**

如題,已知乙個數列,你需要進行下面兩種操作:

將某區間每乙個數加上 kk。

求出某區間每乙個數的和。

第一行包含兩個整數 n,,m,分別表示該數列數字的個數和操作的總個數。

第二行包含 nn個用空格分隔的整數,其中第 ii 個數字表示數列第 ii 項的初始值。

接下來 mm行每行包含 3或 44個整數,表示乙個操作,具體如下:

1 x y k:將區間 [x, y][x,y] 內每個數加上 k。

2 x y:輸出區間 [x, y][x,y] 內每個數的和。

輸出包含若干行整數,即為所有操作 2 的結果。

如題,已知乙個數列,你需要進行下面兩種操作:

將某區間每乙個數加上 kk。

求出某區間每乙個數的和。

第一行包含兩個整數 n,,m,分別表示該數列數字的個數和操作的總個數。

第二行包含 nn個用空格分隔的整數,其中第 ii 個數字表示數列第 ii項的初始值。

接下來 m行每行包含 3 或 4 個整數,表示乙個操作,具體如下:

1 x y k:將區間 [x, y][x,y] 內每個數加上 k。

2 x y:輸出區間 [x, y][x,y] 內每個數的和。

輸出包含若干行整數,即為所有操作 2 的結果。

1 #include2 #include3

using

namespace

std;

4long

long

ans;

5int add[100005];6

intn,m,x,y,k,q,i,mid;

7int t=5;8

struct

reca[100005

];12

long

long b[100005

];13

int add(int p,int

k)14

18void pushdown(int

p)19

25void build(int p,int l,int

r)26

34 mid=(l+r)/2

;35 build(p*2

,l,mid);

36 build(p*2+1,mid+1

,r);

37 a[p].dat=a[p*2].dat+a[p*2+1

].dat;

38 t=t+1;39

}40void change(int p,int l,int r,int

k)41

47 mid=(a[p].l+a[p].r)/2;48

if(l<=mid)change(p*2

,l,r,k);

49if(r>mid)change(p*2+1

,l,r,k);50}

51long

long ask(int p,int l,int

r)52

58pushdown(p);

59 mid=(a[p].l+a[p].r)/2;60

if(l<=mid)ans+=ask(p*2

,l,r);

61if(r>mid)ans+=ask(p*2+1

,l,r);

62return

ans;63}

64int

main()

6574 build(1,1

,n);

7576

for(i=1;i<=m;i++)

7784

else

8591

}92 }

view code

#include

#include

using namespace std;

long long ans;

int add[100005];

int n,m,x,y,k,q,i,mid;

int t=5;

struct reca[100005];

long long b[100005];

int add(int p,int k)

void pushdown(int p)

void build(int p,int l,int r)

mid=(l+r)/2;

build(p*2,l,mid);

build(p*2+1,mid+1,r);

a[p].dat=a[p*2].dat+a[p*2+1].dat;

t=t+1;

}void change(int p,int l,int r,int k)

mid=(a[p].l+a[p].r)/2;

if(l<=mid)change(p*2,l,r,k);

if(r>mid)change(p*2+1,l,r,k);

}long long ask(int p,int l,int r)

pushdown(p);

mid=(a[p].l+a[p].r)/2;

if(l<=mid)ans+=ask(p*2,l,r);

if(r>mid)ans+=ask(p*2+1,l,r);

return ans;

}int main()

build(1,1,n);

for(i=1;i<=m;i++)

else}}

線段樹模板(模板)

參考部落格 持續更新。外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img xhrgdjcd 1613976863463 區間儲存在陣列中的下標對應為 12 3 4 5 6 7 8 9 10 11 12 13 14 15 四部分單點更新 根據題目的要求編寫自己的pushup,query...

線段樹模板

include include include using namespace std const int size 10010 struct node the node of line tree class linetree void updatem void updateline public ...

線段樹模板

單點更新,區間求最值 include include include include include define n 222222 using namespace std int num n struct tree tree n 4 void push up int root void build...