1. 程式人生 > 其它 >冒險類手機遊戲大全_冒險類網遊_單機遊戲下載_好玩的冒險類手遊排行榜

冒險類手機遊戲大全_冒險類網遊_單機遊戲下載_好玩的冒險類手遊排行榜

本篇主要是我學習了莫隊演算法之後的一些感受,僅包含普通莫隊與普通帶修改莫隊相關知識,望各位大佬指點一二


首先就是非常經典的莫隊適用的題型:
(1)區間詢問問題,且區間資訊不可高效合併,即傳統資料結構難以維護
(2)必須可以離線
(3)不帶修改(或帶簡單修改)
(4)(這一條可以自動忽略)若已知區間 \([L_1,R_1]\) 的答案,我們可以花費 \(O(|L_1 - L_2|)\) 的時間將左端點移到 \(L_2\),花費 \(O(|R_1 - R_2|)\) 的時間將右端點移到 \(R_2\) 的位置,從而得到區間 \([L_2,R_2]\) 的答案,即我們區間左右端點移動 \(1\) 的複雜度是 \(O(1)\)


下面就來說一下莫隊的基本思想:
在我們可以 \(O(1)\) 地移動區間左右端點地前提下,莫隊就是將所有的詢問區間按照一定順序排好,然後從第一個區間開始進行區間的移動,每次移動完一個區間就進行答案的統計,每一個區間的答案從上一個移動好的區間移動過去,而非從頭開始重新移動,我們一開始認為已知 \([0,0]\) 的答案


看思想肯定是啥都不會的,下面就通過一道題具體來看一下什麼是莫隊(相信我莫隊真的不難)
題目描述:

基本思路:
我們在本題中維護陣列 \(tmp[i]\) 表示數 \(i\) 出現的次數,在移動區間的過程中對這個陣列進行操作,若 \(val[i]\) 在加入了一次 \(i\)

之後為 \(1\) 則為出現了一個新數,同理若 \(val[i]\) 在刪去了一個 \(i\) 之後為 \(0\) 則為消失了一個數,然後按照莫隊的基本寫法寫就好了
(因為本題我程式碼寫的不符合莫隊的規範,會起誤導作用,所以就明天再來填坑了)