洛谷T44252 線索 分治線段樹 思維題

2022-05-09 17:24:45 字數 1372 閱讀 4014

分治線段樹,其實就是將標記永久化,到最後再統一下傳所有標記。

至於先後順序,可以給每個節點開乙個時間戳。

一般地,分治線段樹用於離線,只查詢一次答案的題目。

本題中,標記要被下傳 2

2 次。

code:

#include

#include

#include

using namespace std;

const

int maxn =

100000+10

;int n,m, tag[maxn <<2]

, lazy[maxn <<2]

, siz[maxn]

, root[maxn]

, p[maxn]

, tag_root[maxn]

, ans[maxn]

;int

find

(int x)

struct segment_tree

int mid =

(l + r)

>>1;

update

(l, mid, l, r,col, times, lson)

;update

(mid +

1, r, l, r, col , times, rson);}

inline

void

pushdown

(int o)

void

release

(int o,

int l,

int r)

int mid =

(l + r)

>>1;

pushdown

(o);

release

(lson, l, mid)

;release

(rson, mid +

1, r);}

}t;int

main()

for(

int i =

2;i <= m +1;

++i)

break;}

} t.

release(1

,1, n)

; t.

release(1

,1, n)

;for

(int i =

1;i <= n;

++i)

printf

("%d "

,ans[i]);

printf

("\n");

for(

int i =

1;i <= n;

++i)

return0;

}

洛谷 3373 線段樹

傳送門 思路 關鍵在於乘與加的先後計算關係,x y k x k y k,從這裡可以看出來,把加法轉化為乘法計算,取消了 與 先後順序 pushdown時,即為乘法標記 原有資料 加法標記 長度。注意點 這個題資料範圍取long long 讀入的k也是long long,傳入函式時用long long...

洛谷 1198 線段樹

線段樹的單點更新 區間查詢,典型的求區間最大值。如下 1 include2 using namespace std 3 typedef unsigned int ui 4 typedef long long ll 5 typedef unsigned long long ull 6 define p...

洛谷3373 線段樹2(線段樹)

rt,就是線段樹的模板,支援區間乘 區間加 區間求和。很有意思的一點是兩個標記的下傳,解決了就行了。然後這道題,作為ahoi,竟然是個裸的模板!可能年份久遠的原因吧。兩個一毛一樣嘛!includeusing namespace std typedef long long ll const ll ma...