BZOJ 3585 mex 莫隊演算法 分塊

2021-06-28 13:01:55 字數 1041 閱讀 9437

題目大意:給定乙個長度為n的陣列,m次詢問某個區間內的mex值

怒寫莫隊233

將權值分成√n塊,記錄每個權值的出現次數以及每塊內有多少權值出現過

修改o(1)即可完成 查詢時首先掃一遍找到第乙個塊內有沒有覆蓋的點的塊 然後在塊內暴力查詢 時間複雜度o(√n)

套個莫隊 總時間複雜度o(m√n)

#include #include #include #include #include #define m 200200

using namespace std;

struct abcdqueries[m];

int n,m,b;

int a[m],belong[m],l[m],r[m];

int l=1,r=0,f[m],block_ans[m],ans[m];

bool abcd :: operator < (const abcd &x) const

void downdate(int x)

int query()

int main()

{ int i;

cin>>n>>m;

b=int(sqrt(n)+1e-7);

for(i=1;i<=n;i++)

belong[i]=(i-1)/b+1;

for(i=1;(i-1)*b+1<=n;i++)

l[i]=(i-1)*b+1,r[i]=min(i*b,n);

for(i=1;i<=n;i++)

scanf("%d",&a[i]);

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

scanf("%d%d",&queries[i].l,&queries[i].r),queries[i].id=i;

sort(queries+1,queries+n+1);

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

{ while(rqueries[i].l)

update(a[--l]);

while(r>queries[i].r)

downdate(a[r--]);

while(l

BZOJ 3585 mex 莫隊演算法

離線處理,這題完全不用離散化直接無視 n的數就可以了 因為大於n的數對答案肯定沒有影響 與bzoj3339完全一樣 似有又水了一題 include include include include include include include include include include defi...

bzoj3585 mex 分塊 莫隊演算法

首先,按照莫隊的方式對操作排序,對權值分塊,維護一下每個塊出現的個數。每次詢問,找到第乙個沒有鋪滿的塊,在下乙個塊內暴力找即可。include include include include include include define maxn 200010 using namespace std...

BZOJ 3585 mex 莫隊演算法 分塊

time limit 20 sec memory limit 128 mb submit 973 solved 513 description 有乙個長度為n的陣列。m次詢問,每次詢問乙個區間內最小沒有出現過的自然數。input 第一行n,m。第二行為n個數。從第三行開始,每行乙個詢問l,r。out...