分治線段樹,其實就是將標記永久化,到最後再統一下傳所有標記。
至於先後順序,可以給每個節點開乙個時間戳。
一般地,分治線段樹用於離線,只查詢一次答案的題目。
本題中,標記要被下傳 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...