這名字真的取的有意思,一開始還不覺得,學了之後發現他真的在回滾.我們回滾莫隊排序是按之前的莫隊一樣將詢問 左塊右位置 的來排序.
回滾問題特別之處在**?
他在滾.
我們對於左右端點都在同一塊裡的,直接暴力for 1遍統計答案,複雜度根號n.
我們是列舉每一塊來統計答案的.此時我們只處理左端點在此塊,右端點在右塊的詢問,左右同塊的見1.我們把ql指標指向下一塊的開頭,qr指標指向這一塊的末尾.對於此本塊詢問,我們先將qr指標向右移更新資訊直到此詢問的右端點.(當我們處理下乙個詢問的時候,qr只需要繼續右移就可以了,因為詢問左端點都同塊的時候,我們是按右端點位置從小到大排序的,所以單調遞增).
這裡好像沒有回滾,並且由於qr單調遞增,區間擴大,並沒有刪除操作.
但是我還沒講ql.
本塊包含詢問的左端點一定在ql左邊(見ql定義).我們就將ql向左移更新答案(此時區間仍然在擴大,只有更新操作沒有刪除操作),到了詢問的左端點,統計答案.
然後就開始滾了,並且是回滾.ql向左到達詢問左端點後,向右往初始位置(見ql定義)移,刪除之前一路滾過來所更新的資訊.然後ql回滾回來,qr仍不動,處理下個詢問.
所以就是 qr向右移動更新資訊到詢問右端點->ql向左滾 邊滾邊更新 至詢問左端點,然後處理此區間答案,ql回滾刪除之前一路滾來更新的資訊,回到初位置->處理(下個詢問->本塊詢問處理完->列舉下個塊.
回滾得十分形象.
一道練手題:點這裡(可以用分快做但最好用回滾莫隊練練手,看了我的**你就懂了).
Github 回滾 滾回
github 回滾 檢視歷史版本號。恢復到歷史版本。把修改推到遠端伺服器。git log git reset hard commitid git push u origin mastergithub 回滾後,再滾回 通過git log g命令來找到需要恢復的資訊對應的commit,可以通過提交的時間...
CodeChef LNDNCK 回滾莫隊
鏈結 給你兩個陣列,b,p,陣列個數n 小於等於 2e5.m 個詢問,每次詢問 l r,把 區間 l,r 按照 b 的公升序排序,然後求和 abs p i p i 2 一開始的思路就是直接暴力莫隊,每次把 b 插入到map 裡面去,刪除也是直接從 map 裡面刪除。每次修改只會影響周圍的幾個值。但是...
回滾莫隊初步
正常莫隊,時間複雜度的保證 於分塊和每次挪動指標的 o 1 或 o log 的修改。然而像可持續化並查集的思想一樣,在某些題中因為題目要求,導致並查集不能路徑壓縮,而要把時間版本存到棧,彈棧回溯時間版本。有些題在適應題目中發現,只有擴充套件區間 縮小區間的時間複雜度 那麼就輪到回滾莫隊解決問題。實現...