BZOJ3585 mex 莫隊 分塊

2022-03-27 04:14:41 字數 852 閱讀 8238

顯然可以離線主席樹,這裡用莫隊+分塊做。分塊的乙個重要思想是實現修改與查詢時間複雜度的均衡,這裡莫隊和分塊互相彌補。

考慮暴力的分塊做法,首先顯然大於n的數直接忽略,於是將值域分成sqrt(n)份,每塊記錄塊內的所有值是否在此當前區間內都已存在。

這樣每次暴力從l到r分別放入這個表,最後從小到大詢問每個塊是否已滿,若沒有則在塊內列舉第乙個不存在的數。

注意到這樣的總修改複雜度o(nq),查詢複雜度o(qsqrt(n))。

考慮莫隊,將序列分成sqrt(n)份,使總修改複雜度變為o(nsqrt(n))。查詢複雜度不變o(qsqrt(n))。

1 #include2 #include3

#define rep(i,l,r) for (int i=(l); i<=(r); i++)

4using

namespace

std;56

const

int n=200010,k=810;7

intn,m,b,a[n],b[n],ans[n],cnt[k],s[k][k];

8struct pq[n];910

bool cmp(const p &x,const p &y)

1112

void add(int

x)16

17void del(int

x)21

22int

que()

28return n+1;29

}3031int

main()

45 rep(i,1,m) printf("

%d\n

",ans[i]);

46return0;

47 }

bzoj3585 mex 莫隊 分塊

ac通道 題解 這題思維上有些難度,蒟蒻不得不 了popoqqq大爺題解。將1 n之間的自然數分成根號n塊,每個塊記錄當前塊中已經出現的不同的自然數的個數。那麼在查詢時只需要檢驗每個塊是否滿足r i l i 1 blo i 找到第乙個不滿足以上條件的,然後在該塊內暴力查詢即可。bzoj 3585 b...

BZOJ 3585 Mex 莫隊 分塊

description 有乙個長度為n的陣列。m次詢問,每次詢問乙個區間內最小沒有出現過的自然數。input 第一行n,m。第二行為n個數。從第三行開始,每行乙個詢問l,r。output 一行乙個數,表示每個詢問的答案。examples sample input 5 52 1 0 2 1 3 32 ...

BZOJ 3585 mex 莫隊演算法 分塊

題目大意 給定乙個長度為n的陣列,m次詢問某個區間內的mex值 怒寫莫隊233 將權值分成 n塊,記錄每個權值的出現次數以及每塊內有多少權值出現過 修改o 1 即可完成 查詢時首先掃一遍找到第乙個塊內有沒有覆蓋的點的塊 然後在塊內暴力查詢 時間複雜度o n 套個莫隊 總時間複雜度o m n incl...