題解 P4137 Rmq Problem 莫隊

2022-02-23 19:51:37 字數 807 閱讀 3441

其實這道題根本就不用離散化!

因為顯然有\(mex\)值是\(\le 2\times 10^5\)的,所以對於大於\(2\times 10^5\)的數我們可以忽略。

然後直接莫隊算就是的,開乙個\(2e5\)的桶

有小夥伴會問,這複雜度不上天了?其實不然。移動\(ans\)的總複雜度(好像)是\(o(n\sqrt n)\)的,因為:

由於莫隊中,區間減小增大不是交替的(不存在\(l\)動一次交替然後\(r\)動一次)(都是乙個動完再動另外乙個),所以最終複雜度\(o(n\sqrt n)\),實際上(貌似)吊打\(o(n \log n)\)

//@winlere

#include#include#include#include#includeusing namespace std; typedef long long ll;

inline int qr()

const int maxn=2e5+5;

int be[maxn];

int data[maxn];

int s[maxn];

int n,n,ans,m;

struct q

q(const int&a,const int&b,const int&c)

inline bool operator <(const q&a)const

int main()

for(register int t=1;t<=m;++t) printf("%d\n",be[t]);

return 0;

}

線段樹 Mex 洛谷P4137

有乙個長度為n nn的陣列 m mm次詢問,每次詢問乙個區間內最小沒有出現過的自然數。對1 n 1 n1 n這裡能夠的每個數x xx,都統計出來在陣列中出現的位置,並在前補上0 00,在後補上n 1 n 1n 1.例如陣列 其中1 11出現過的位置就是 其中2 22出現過的位置就是 其中3 33出現...

洛谷P4137 求區間mex

n個數 給m個詢問 每個詢問問這個區間的自然數mex 很久以前做得 有些忘了 首先我們要離散化 mex只可能是 0 a i a i 1 我們把這些值離散化 然後用主席樹維護每種值出現的最晚位置 取min 詢問就是 在r的這顆樹上面 出現最晚位置小於l的最小值 直接在主席樹上二分即可 includeu...

題解 P2058 海港

我們注意到資料範圍,發現二維陣列並不可取,但是我們又注意到 k i 3 105 ki 3 10 5,所以採取一種新的思想 將所有人都讀在乙個一維陣列裡面 使用乙個佇列 q q 來儲存第 i role presentation i i艘船上人數的範圍,即 q q 儲存的是兩個數 l r role pr...