線段樹 模板

2021-09-22 20:21:08 字數 888 閱讀 7163

線段樹模板:

對於二叉樹來說,2n是左子節點,2n+1是右子節點。

建樹複雜度為o(n),更新和查詢的複雜度都是o(lgn)。

要注意對乙個區間進行更新的時候不需要一直更新到底,可以提高效率,需要的時候往下帶就行。

typedef long long ll;

const int maxn=50000+10; //陣列大小

int lazy[maxn<<2]; //懶惰標記

int sum[maxn<<2];

int value[maxn]; //初始值

void pushup(int rt) //向上更新父節點

void pushdown(int rt,int m) //向下更新

}void build(int l,int r,int rt) //建樹

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

build(l,m,rt<<1);

build(m+1,r,rt<<1|1);

pushup(rt);

}void update(int l,int r,int c,int l,int r,int rt) //將l~r區間加上c,可以根據需要修改更新函式

pushdown(rt,r-l+1);

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

if(l<=m) update(l,r,c,l,m,rt<<1);

if(m=r)

return sum[rt];

pushdown(rt,r-l+1);

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

ll ret=0;

if(l<=m) ret+=query(l,r,l,m,rt<<1);

if(mreturn ret;

}

線段樹模板(模板)

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