由於每次詢問靜態區間裡完整值域段的最大大小
貌似很好用莫隊轉移,所以考慮怎麼轉移
當給它擴充套件乙個數時,就是給值域新增了乙個值
這個值可能已經存在,也可能是新的
有的神仙做法是維護了乙個並查集,然而我這碼力..
所以我用了乙個更加初級的操作,給每個點打上向左連續最遠和向右連續最遠的標記
新增乙個新點時,同時更新它的向左連續最遠和向右連續最遠的值的標記
這是新增,刪除呢
目前來看,如果不記錄每個點的影響及其所有後續影響及其影響前的狀態,刪除操作就算萎了
所以要盡量不刪除
可以知道莫隊有個性質,在同乙個左端點分塊裡,右端點具有單調性
雖然左端點沒單調性,但他們的範圍限制在乙個很小的區間裡(根號n的分塊裡)
而且對於每個左端點分塊,跑一遍o(n)的操作是沒問題的
如果只想新增,不想刪除的話..
每次換個分塊就把計數清空,把左右端點放在分塊的右端點,記錄此狀態state
每次拓展右邊,更新state
每次拓展左邊,記錄拓展前的state,拓展後恢復state
這樣保證了每個詢問至多有個根號n複雜度的左記錄和恢復
每個分塊至多有個o(n)的清空
複雜度變成了o(n√n).
bzoj4358 permu 回滾莫隊
序列上的問題?想到莫隊。然而這題像bzoj4241 歷史研究一樣毒瘤,資瓷o 1 o 1 o 1 加入,不資瓷o 1 o 1 o 1 刪除。安利一波題解 bzoj4241 歷史研究qwq 所以像4241一樣,需要用到回滾莫隊。這裡開兩個陣列l,r l,rl,r,l i l i l i 表示加入i時,...
莫隊總結 莫隊例題
假設我們已知區間 l,r,需要計算的區間為 l,r,由於 l 和 r分別只能單步轉移,所以需要的時間複雜度為 l l r r 相當於把兩個區間分別看成是平面上的兩個整點p1 l,r 和p2 l,r 兩點之間的轉移開銷為兩點之間的曼哈頓距離。連線所有點的最優方案為一棵樹,那麼整體的時間複雜度就是這棵樹...
莫隊入門總結
這是一篇適合蒟蒻的講解 大佬可以自行離開 莫隊是一種是離線的演算法 即它在詢問的時候是不會修改的,所以我們可以通過調整詢問的次序來獲得答案。比如區間3到5和區間3到6 他們之間只差了1 於是我們只需要看下新加進來的這個元素對原來答案的影響就好了 對吧?問題是 我們應該如何給詢問區間排序使得時間複雜度...