線段樹模板及其運用

2021-08-09 20:56:26 字數 2597 閱讀 4260

目錄:

洛谷 p2068 統計和

洛谷 p3373 線段樹2

###洛谷 p2068 統計和

很裸的一道模板題,直接上**了。

#include

#include

#include

#include

#include

#define ll long long

#define ls (rt<<1)

#define rs (rt<<1|1)

#define mid ((tree[rt].r+tree[rt].l)>>1)

#define fp(i,a,b) for(register int i=a;i<=b;++i)

using

namespace std;

struct arrtree[

500000];

int n,m;

inline ll read()

inline

void

pushup

(int rt)

inline

void

pushdown

(int rt)

}void

build

(int l,

int r,

int rt)

void

updata

(int l,

int r,ll c,

int rt)

pushdown

(rt);if

(r<=mid)

updata

(l,r,c,ls)

;else

if(l>mid)

updata

(l,r,c,rs)

;else

pushup

(rt);}

ll query

(int l,

int r,

int rt)

pushup

(rt)

;return ans;

}int

main()

if(op==

'y')

}}

###洛谷 p3373 線段樹2

這裡有幾個注意點:

1.我們要下傳兩個tag,乙個用於乘法,另乙個用於加法

2.我們在下傳乘法的tag時,同時要更新加法的tag。

3.我們在下傳tag的時候,必須得先更新乘法的,在更新加法的。

4.具體看**吧(自我感覺**可讀性還可以的吧)

#include

#include

#include

#include

#include

#define ll long long

#define ls (rt<<1)

#define rs (rt<<1|1)

#define mid ((tree[rt].r+tree[rt].l)>>1)

#define fp(i,a,b) for(register int i=a;i<=b;++i)

using

namespace std;

struct arrtree[

500000];

int n,m,p;

inline ll read()

inline

void

pushup

(int rt)

inline

void

pushdown

(int rt)

if(tree[rt]

.tag)

}void

build

(int l,

int r,

int rt)

void

updata

(int l,

int r,ll c,

int rt)

pushdown

(rt);if

(r<=mid)

updata

(l,r,c,ls)

;else

if(l>mid)

updata

(l,r,c,rs)

;else

pushup

(rt);}

void

updata1

(int l,

int r,ll c,

int rt)

pushdown

(rt);if

(r<=mid)

updata1

(l,r,c,ls)

;else

if(l>mid)

updata1

(l,r,c,rs)

;else

pushup

(rt);}

ll query

(int l,

int r,

int rt)

intmain()

fp(i,

1,m)

if(op==2)

if(op==3)

}}

線段樹模板(模板)

參考部落格 持續更新。外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 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...