bzoj3585 mex 分塊 莫隊演算法

2021-07-09 12:27:13 字數 586 閱讀 9452

首先,按照莫隊的方式對操作排序,對權值分塊,維護一下每個塊出現的個數。

每次詢問,找到第乙個沒有鋪滿的塊,在下乙個塊內暴力找即可。

#include#include#include#include#include#include#define maxn 200010

using namespace std;

struct yts

q[maxn];

int ans[maxn];

int pos[maxn],bel[maxn],l[maxn],r[maxn],w[maxn];

int num[maxn];

int a[maxn];

int n,m,tot,block,mx;

bool cmp(yts x,yts y)

void add(int x)

void solve()

{ int l=1,r=0;

for (int i=1;i<=m;i++)

{while (lq[i].r) del(a[r--]);

while (l>q[i].l) add(a[--l]);

while (r

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 ...

BZOJ3585 mex 莫隊 分塊

顯然可以離線主席樹,這裡用莫隊 分塊做。分塊的乙個重要思想是實現修改與查詢時間複雜度的均衡,這裡莫隊和分塊互相彌補。考慮暴力的分塊做法,首先顯然大於n的數直接忽略,於是將值域分成sqrt n 份,每塊記錄塊內的所有值是否在此當前區間內都已存在。這樣每次暴力從l到r分別放入這個表,最後從小到大詢問每個...