線段樹與樹狀陣列的詳解及區別

2021-09-29 14:58:55 字數 518 閱讀 4211

線段樹,一種二叉搜尋樹。它將一段區間劃分為若干單位區間,每乙個節點都儲存著乙個區間,每個單元區間對應線段樹中的乙個葉結點。可用於區間求和,區間最大值,區間修改,單點修改等操作。

修改、查詢、統計:o(log(n))

具體操作再寫

o(4*n)

但是,可以用線段樹維護的問題必須滿足區間加法。

e.g.

1、區間求和

2、區間最大值

反例:區間眾數、區間最長不下降子串行

1、build

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);  

//更新資訊

sum[rt]=sum[rt<<1]+sum[rt<<1|1];

}

樹狀陣列與線段樹

推一下關於樹狀陣列的講解部落格 和線段樹的講解 package test2 public class 線段樹 int len a.length segtree t buildtree 0,len 1,a int sum0 2 query t,0,2 int sum1 3 query t,1,3 查詢...

樹狀陣列與線段樹(三)

找規律題 1.螺旋折線 如下圖所示的螺旋折線經過平面上所有整點恰好一次。對於整點 x,y 我們定義它到原點的距離 dis x,y 是從原點到 x,y 的螺旋折線段的長度。例如 dis 0,1 3,dis 2,1 9 給出整點座標 x,y 你能計算出 dis x,y 嗎?輸入格式 包含兩個整數 x,y...

樹狀陣列與線段樹(二)

樹狀陣列 1.小朋友排隊 n n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是 0 0 如果某個小朋友第一次被要求交換,則他的不高興程度增加 1 1 如果第二次要求他交換,則他的不...