bzoj3211 花神遊歷各國
bzoj5312 冒險
bzoj4355 play with sequence
bzoj4695 最假女選手
\(a_i = max(a_i, x)\) 這種操作的 tag 不需要實際記錄下來,son.mn1 = min(max(son.mn1, dad.mn1), dad.mx1)
就行了。
修改mn1, mn2
的時候需要特判區間只有 1 個數和 2 個數的情況,因為這些情況涉及到mx1, mx2
也可能改變。
想清楚tag_cover
和tag_add
應該如何疊加。
想清楚怎樣更新嚴格的mn1, mn2
。
**長的時候心態別崩,不要皮,不要打錯變數名……這是老生常談了。
善於利用黑暗暴走 oj 。
關於複雜度證明:關鍵節點,似乎乙個關鍵節點改變用乙個 log ,然後根據 tag 標記的原理至多 log 個 tag ,所以理論上是 \(o(n\cdot \log^2 n)\) ,實際上接近 \(o(n\cdot \log n)\) 。
upd: 一點優化
雖然還沒有到達要修改的區間 \([s,t]\) ,但是修改操作對於包含 \([s,t]\) 的區間 \([l,r]\) 都已經沒有了影響,應該直接返回。
區間 and 上或者 or 上乙個數 \(x\) ,查詢 \(max\) 的題,按位討論,對於 \(sum\_and\ xor\ sum\_or = 1\) 的位(等於 \(0\) 時顯然怎麼操作都不會改變 \(max\) ),只要 \(x\) 在這些位的值全部相等即無影響,因為這樣要麼完全沒有修改這些位,要麼麼全部修改成了乙個相同的值。
((p->s_a ^ p->s_o) & x) == 0 || ((p->s_a ^ p->s_o) & x) == (p->s_a ^ p->s_o)
只討論了一種也不會太慢,但確實加上會快一些。
我為何會深入思考這個?因為 loj6507 「雅禮集訓 2018 day7」a t 飛了。
吉司機線段樹
學了一下吉老師的在某年wc的講的線段樹。特來總結,學習一番.楔子 給出乙個數列a 每次讓某個區間中的 a i 對x取min 詢問某個區間的和。n,m leq 500000 由於存在多次詢問 我們進行標記永久化也沒什麼用 如果是一次的話我可以每次把標記標記到區間 最後求值即可。這裡要引出吉司機線段樹了...
hdu6521 Party(吉司機線段樹)
題意 有n個人,一開始所有人互相不認識。現在有m場party,每場給出l,r,表示編號在 l,r 內的所有人參加,參加之後這些人互相認識。現在要求計算每次party之後會有多少對新的互相認識的人,資料範圍 n,m 2e5 解法 因為區間是連續的,令l i 表示第i個人向左方向認識的最大位置 不需要r...
模板 吉老師線段樹
acm模板 gorgeous sequence 區間最值操作往往採用以下辦法 線段樹維護 實現區間最小值操作,考慮u節點維護的區間,進行如下處理 時間複雜度請直接查閱吉老師2016年國家集訓隊 不太會 define io ios sync with stdio false cin.tie cout....