洛谷 P3372 線段樹1

2022-08-31 06:12:12 字數 994 閱讀 6012

這是一道模板題

線段樹介紹

1 #include2

using

namespace

std;

3int

m,n;

4int a[100001];5

6struct

nodexds[4*100001]; //

4倍空間

1011

//一、建樹

12void buid(int l,int r,int

k)19

int m=(l+r)/2

;20 buid(l,m,2*k);

21 buid(m+1,r,2*k+1

);22 xds[k].w=xds[2*k].w+xds[2*k+1].w;//

不要忘記區間和上傳!!特別容易忘 23}

2425

26//

二、懶標記下傳

27void down(int

k)34

35//

三、區間修改

36void add_(int x,int y,int k,int

a)42

if(xds[a].f) down(a);//

!!!

43int m=(xds[a].l+xds[a].r)/2;44

if(x<=m) add_(x,y,k,a*2

);45

if(y>m) add_(x,y,k,a*2+1

);

46 xds[a].w=xds[a*2].w+xds[a*2+1

].w;47}

4849

long

long ask_(int x,int y,int k) //

注意資料範圍內,開int只能得70分

5062

6364

intmain()

76return0;

77 }

洛谷 P3372 線段樹 1

今天植樹節,來種一棵線段樹。傳送門如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數加上x 2.求出某區間每乙個數的和 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第 i 個數字表示數列第 i 項的初始值。接下來m行每...

線段樹1 洛谷P3372

如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數加上x 2.求出某區間每乙個數的和 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3或4個整數,表示乙個操作,具體如下...

洛谷 P3372 線段樹 模板1

模板一是區間加修改和區間和 例題 如下 include includeusing namespace std struct tree int rt 1,cnt 2 int n,i,m const int maxa 100000 tree tree maxa 1 結構體模擬線段樹 long long ...