這是一道模板題
線段樹介紹
1 #include2using
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 ...