整理一下線段樹模板。
因為學的不精,複雜度是在我能力範圍內最優的,以後學會了更優秀的再說吧。
分兩塊:
1:單點修改,區間查詢
2:區間修改,區間查詢
其實線段樹的變種挺多的,這兩個放在這方便修改。
我還是比較喜歡寫成結構體的形式。。
1:單點修改,區間查詢
#define lson i << 1
#define rson i << 1 | 1
templateinline t qmax(t a, t b)
struct nodetree[maxn<<2];
int a[maxn];
int n, m;
void push_up(int i)
void build(int i, int l, int r)
int mid = (l + r) >> 1;
build(lson, l, mid);
build(rson, mid + 1, r);
push_up(i);
}void update(int i, int pos, int val)
tree[i].max = qmax(tree[i].max, val);
int mid = (tree[i].l + tree[i].r) >> 1;
if(pos <= mid) update(lson, pos, val);
else update(rson, pos, val);
}int query(int i, int l, int r)
}int main()
else
} }return 0;
}
2:區間修改,區間查詢
#define lson x << 1
#define rson x << 1 | 1
int a[maxn];
struct seg_tree
inline void down(int x, int l, int mid, int r)
} void build(int x, int l, int r)
int mid = (l + r) >> 1;
build(lson, l, mid); build(rson, mid + 1, r);
up(x);
} void add(int x, int l, int r, int l, int r, int del)
int mid = (l + r) >> 1;
down(x, l, mid, r);
add(lson, l, mid, l, r, del); add(rson, mid + 1, r, l, r, del);
up(x);
} ll query_sum(int x, int l, int r, int l, int r)
} tree;
線段樹模板(模板)
參考部落格 持續更新。外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 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...