p3372 線段樹模版

2021-10-07 06:30:40 字數 2208 閱讀 3366

題目鏈結

對樣例的樹這樣畫w

從上到下標區間

【0-4】這個是tree

【0-2】是tree

【3-4】是tree

【0-1】是tree

是tree

是tree

是tree

是tree

是tree

接下來的都是空結點

然後看**叭

#include

using

namespace std;

#define max_len 500040

#define maxn 100010

//儲存還可以用結構體陣列——這樣就可以不用傳這麼多引數了www

long

long tree[max_len]

;long

long arr[max_len]

;long

long tag[max_len]

;long

long m,n;

void

build_tree

(long

long node,

long

long start,

long

long end)

//node表示樹的下標——從上到下標噠;

long

long mid=

(start+end)

>>1;

build_tree(2

*node+

1,start,mid)

;build_tree(2

*node+

2,mid+

1,end)

; tree[node]

=tree[node*2+

1]+tree[node*2+

2];}

void

add(

long

long node,

long

long l,

long

long r,

long

long v)

//push_down 標記下傳函式

void

push_down

(long

long node,

long

long start,

long

long end,

long

long mid)

//modify_tree區間修改函式

void

modify_tree

(long

long node,

long

long start,

long

long end,

long

long x,

long

long y,

long

long v)

long

long mid=

(start+end)

>>1;

push_down

(node,start,end,mid);if

(x<=mid)

modify_tree(2

*node+

1,start,mid,x,y,v);if

(y>mid)

modify_tree(2

*node+

2,mid+

1,end,x,y,v)

; tree[node]

=tree[

2*node+1]

+tree[node*2+

2];}

long

long

query_tree

(long

long node,

long

long start,

long

long end,

long

long l,

long

long r)

intmain()

else

}return0;

}

好叭 其實不用辣麼多longlong噠……陣列裡面的下標不用longlong陣列的值大小還是要longlong叭……ww

P3372 線段樹模版1

藉著題解系統得梳理一下對於線段樹的理解 先建立乙個結構體為下面 實現打基礎 struct treet 1000005 首先,什麼是線段樹呢?線段樹屬於完全二叉樹,其中每乙個子節點而言,都表示整個序列中的一段子區間。由第一層結點儲存單個元素,每個子節點不斷向自己的父親節點傳遞資訊,而父節點儲存的資訊則...

洛谷 P3372 線段樹模版題

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

P3372 模板 線段樹 1

線段樹學習 這個題來看,線段樹分為建樹,更新,查詢。1.建樹 void build ll p,ll l,ll r ll mid l r 1 build lson p l,mid build rson p mid 1,r push up sum p void push up sum ll p 這段 的...