線段樹模板

2021-08-28 03:24:38 字數 1261 閱讀 4321

#include using namespace std;

#define mmax 100010

struct hahawe[mmax<<2];

int sum[mmax<<2],add[mmax<<2];//求和,懶惰標記

int a[mmax];

//pushup

//求和更新

void pushup(int it)

//建樹

void build(int l,int r,int it)

int mid=(l+r)>>1;

//遞迴左子樹

build(l,mid,it<<1);

//遞迴右子樹

build(mid+1,r,it<<1|1);

//更新資訊

pushup(it);

}//需要用到下推函式

void pushudown(int rt,int ln,int rn)

}//a[l,r]+=c

void update1(int l,int r,int c,int l,int r,int rt)

int mid=(l+r)>>1;

pushudown(rt,mid-l+1,r-mid);//下推標記

//判斷左區間是否跟目標區間有交集

if(l<=mid) update1(l,r,c,l,mid,rt<<1);

//判斷右區間是否和目標區間有交集

if(mid>1;

//如果和upadete1混用則需要下推 pushdown(rt,m-l+1,r-m);

if(l<=l) update2(l,c,l,mid,it<<1);

else update2(l,c,mid+1,r,it<<1|1);

pushup(it);

} //求a[l]+a[l+1]+...+a[r]

int query(int l,int r,int l,int r,int it)

int mid=(l+r)>>1;

//一定得先下推

pushudown(it,mid-l+1,r-mid);

int ans=0;

if(l <= mid) ans+=query(l,r,l,mid,it<<1);

if(r > mid) ans+=query(l,r,mid+1,r,it<<1|1);

pushup(it);//更新本節點資訊

}int main()

線段樹模板(模板)

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