線段樹基礎

2022-05-01 17:48:07 字數 1493 閱讀 6330

線段樹:線段樹用來儲存區域資訊

主要有五種操作:

建樹、單點查詢、單點修改、區間查詢、區間修改。

注意和樹狀陣列一樣不能處理位置0

#includeusing

namespace

std;

//input by bxd

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define repp(i,a,b) for(int i=(a);i>=(b);--i)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m)

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s);

#define ll long long

#define pb push_back

#define rep(i,n) for(int i=0;i

#define clr(a,v) memset(a,v,sizeof a)

/////////////////////////////////

/#define inf 0x3f3f3f3f

#define lson l,m,pos<<1

#define rson m+1,r,pos<<1|1

const

int n=100000+2

;ll sum[n

<<2],col[n<<2

];void up(int

pos)

void down(int pos,intm)}

void build(int l,int r,int

pos)

int m=(l+r)>>1

; build(lson);

build(rson);

up(pos);

}void update(int l,int r,int v,int l,int r,int

pos)

down(pos,r-l+1

);

int m=(l+r)>>1

;

if(l<=m)update(l,r,v,lson);

if(r>m)update(l,r,v,rson);

up(pos);

}ll query(

int l,int r,int l,int r,int

pos)

down(pos,r-l+1

); ll ans=0

;

int m=(l+r)>>1

;

if(l<=m)ans+=query(l,r,lson);

if(r>m)ans+=query(l,r,rson);

return

ans;

}

view code

線段樹 01 線段樹基礎

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

線段樹 基礎

d 基礎 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿...

線段樹基礎

寫得不錯啊。前段時間寫了篇 搞懂樹狀陣列 如果說樹狀陣列是優雅的,那麼線段樹就是萬能的。有句話就叫 樹狀陣列能做的線段樹都能做,但是樹狀陣列能做的堅決用樹狀陣列!因為線段樹本來的內容狠豐富的,主要有單點跟新 區間跟新,最值詢問 區間詢問 反正就是對於區間進行的動態跟新詢問都能較高效的完成。對於初學者...