P3372 模板 線段樹 1

2021-09-27 00:05:54 字數 1547 閱讀 1039

題目入口:

此模版高度借鑑了@sduwh_2u的模版樣例

實際上費了老大勁才勉強弄明白

每一行都加入了自己的理解 鬼知道我是否理解對了

還會繼續學習線段樹的 到時候會更新此部落格 咕咕咕

#include

#include

using namespace std;

typedef

long

long ll;

const

int maxn =

1e5+10;

//最大點的個數

int n, m, x, y, opt;

//點值 運算元 操作左區間 操作右區間 操作選擇

ll k;

//修改值

struct node tree[maxn <<2]

;//四倍空間

inline

intls

(int id)

//返回左孩子的根節點

inline

intrs

(int id)

//返回右孩子的根節點

void

push_up

(int id)

void

push_down

(int id)

}void

build

(int id,

int l,

int r)

int mid =

(l + r)

>>1;

//取當前線段樹節點區間中點

build(ls

(id)

, l, mid)

;//左遞迴

build(rs

(id)

, mid +

1, r)

;//右遞迴

push_up

(id)

;//回溯 由孩子節點維護父節點區間和

}void

add(

int id,

int l,

int r, ll x)

push_down

(id)

;//順延標記

int mid =

(tree[id]

.l + tree[id]

.r)>>1;

//取當前線段樹節點區間中點

if(r <= mid)

add(

ls(id)

, l, r, x)

;//左遞迴

else

if(l > mid)

add(

rs(id)

, l, r, x)

;//右遞迴

else

push_up

(id)

;//回溯 由孩子節點更新父節點區間和

}ll query

(int id,

int l,

int r)

intmain()

}return0;

}

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 這段 的...

P3372 模板 線段樹 1

題 include includeusing namespace std typedef long long ll ll n,m,ans,x,y,op,val 因為下面有的函式需要用到x,y,val值,懶得傳參,故直接寫為全域性變數 const int n 100000 struct nodetre...

P3372 模板 線段樹 1

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