1. 程式人生 > 其它 >線段樹亂寫

線段樹亂寫

一個常用的資料結構

線段樹維護單調棧

例題:God Knows , 牛半仙的妹子序列..
亦可以看作是維護極長上升子序列..右邊先行..

線段樹區間查詢

大多部分線段樹均是查詢\(tr[x].l\geq ql\ and\ tr[x].r\leq qr\)便停止。
但是有一部分題目並不是查詢到這個條件就停止,
例如:矩形(noip模擬35),一個比較明顯的掃描線,
因為從未寫過區間資訊不滿足時就停止下訪,
於是便錯誤地合併了一些資訊..
但是對於一些有特殊性質的題目,可以選擇到達區間後,將區間資訊下傳給子區間,
然後再將子區間的答案統計一下,
這樣的常數可能稍大,但並不是劇烈地影響時間複雜度..

另外不要寫成: (一個過於低階的錯誤了..)

\[if(ql \leq mid)\ sum+=query(x<<1); \]\[else\ return\ sum+=query(x<<1\ |\ 1); \]

第二行要寫成:

\[if(qr>mid)\ sum+=query(x<<1\ |\ 1); \]

線段樹區間合併資訊

經典的一道題:山海經..
在更大的區間\(pushup\)即可..

線段樹解決高維偏序問題

解決二維偏序問題,有些類似權值線段樹,亦可使用樹狀陣列解決..

解決三維偏序問題,可以選擇CDQ分治,也可以選擇使用樹套樹..
其實也並非全部都是真正意義上的樹套樹,亦可以將元素儲存在區間節點上,同樣是上面的的題目'矩形',可以將三維偏序降低為二維偏序,而方法就是在節點上開了一個\(set\)

維護..