模板 線段樹

2021-10-06 10:17:52 字數 1099 閱讀 1399

/*

線段樹(segment tree)

*/struct segmenttree

;

node t[n<<2];

void pushup(int p)

void pushdown(int p)

}//建樹

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

int mid=(l+r)/2;

int lson=p*2,rson=p*2+1;

build(lson,l,mid); //遞迴左子節點

build(rson,mid+1,r); //遞迴右子節點

pushup(p); //遞迴返回後進行上推,更新本節點資訊

}//單點修改

void updateone(int p,int pos,int num)

int mid=(t[p].l+t[p].r)/2;

int lson=p*2,rson=p*2+1;

if(pos<=mid)

else

pushup(p); //遞迴返回後進行上推,更新本節點資訊

}//區間修改,[l,r]表示待修改區間

void update(int p,int l,int r,int num)

pushdown(p); //進入子節點前先傳遞延遲標記,便於接下來的遞迴更新

int mid=(t[p].l+t[p].r)/2;

int lson=p*2,rson=p*2+1;

if(l<=mid)

if(r>mid)

pushup(p);//子節點更新返回後要更新父節點

}//區間查詢

int query(int p,int l,int r)

int tsum=0;

int mid=(t[p].l+t[p].r)/2;

int lson=p*2,rson=p*2+1;

pushdown(p); //在向下訪問之前,先向下更新

if(l<=mid)

if(r>mid)

return tsum;

}};

線段樹模板(模板)

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