線段樹綜合

2021-09-25 02:27:23 字數 2368 閱讀 2999

單點操作和區間查詢

#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

#define ll long long

using namespace std;

const int maxn = 1e5+5;

int sum[maxn<<2];

void pushup(int rt)

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

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

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

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

pushup(rt);

}void update(int p,int v,int l,int r,int rt)

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

if (p <= m)

update(p, v, l, m, rt << 1);

else

update(p, v, m+1, r, rt << 1 | 1);

pushup(rt);

}int query(int l,int r,int l,int r,int rt)

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

int ans = 0;

if(l<=mid)

if(r>mid)

pushup(rt);

return ans;

}//單點建樹及區間查詢

int main()

else if(s == "add")

else if(s == "sub")

else

}} return 0;

}//適合與單點最簡點那種

簡單的區間更新和查詢總數

#include#include#includeusing namespace std;

#define ll long long

#define rson rt<<1|1

#define lson rt<<1

ll _sum,_min,_max;

const ll maxn = 1e5+5;

ll st[maxn<<2],stmin[maxn<<2],stvis[maxn<<2],stmax[maxn<<2];

ll a[maxn];

void push_up(ll rt)

void push_down(ll rt,ll sec) //rt標記節點 sec區間

void build(ll l,ll r,ll rt)

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

build(l,mid,lson);

build(mid+1,r,rson);

push_up(rt);

}//建樹

void mod_update(int l,int r,int mod,int l,int r,int rt)//區間mod

else

}return 0;

}

求區間最值如果單單是這樣可以用rmq

#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

#define ll long long

#define rson rt<<1|1

#define lson rt<<1

const ll maxn = 1e5+5;

using namespace std;

ll st[maxn<<2],stmin[maxn<<2],stvis[maxn<<2],stmax[maxn<<2];

ll a[maxn];

void push_up(int rt)

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

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

build(l,mid,lson);

build(mid+1,r,rson);

push_up(rt);

}ll query1(int l,int r,int l,int r,int rt)

//查詢區間最大

ll query2(int l,int r,int l,int r,int rt)

//查詢區間最小

int main()

int l,r;

build(1,n,1);

for(int i = 0;i < q;++i)

return 0;

}

線段樹與樹狀陣列的綜合運用

前言 線段樹樹狀陣列是高階資料結構最基本的部分,資料結構又是省選最基本的部分,所以從他開始整理一下。題目以洛谷和bz為基底 1.基礎運用 資料結構最基本的問題就是操作和詢問的問題,修改可以分為點修改 包括點的函式運算 區間運算 區間最大最小和取模 區間set 其中點修改就是領出樹上的一條長鏈,對其末...

線段樹 02 構建線段樹

public inte ce merger 不能再縮小的基本問題是 對treeindex指向的節點的情況進行討論 public class segmenttree 在treeindex的位置建立表示區間 l.r 的線段樹 private void buildsegmenttree int treei...

線段樹 01 線段樹基礎

物理上 public class segmenttree public int getsize public e get int index 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引 private int leftchild int index 返回完全二叉樹的陣列表示中...