ac通道:
【題解】
這題思維上有些難度,蒟蒻不得不**了popoqqq大爺題解。
將1~n之間的自然數分成根號n塊,每個塊記錄當前塊中已經出現的不同的自然數的個數。
那麼在查詢時只需要檢驗每個塊是否滿足r[i]-l[i]+1==blo[i],找到第乙個不滿足以上條件的,然後在該塊內暴力查詢即可。
/*************
bzoj 3585
by chty
2016.11.29
*************/
#include#include#include#include#include#include#includeusing namespace std;
#define file "read"
#define maxn 200010
#define up(i,j,n) for(int i=j;i<=n;i++)
namespace init
inline int read()
while(isdigit(ch))
return x*f;
}}using namespace init;
struct nodeq[maxn];
int n,m,block,a[maxn],ans[maxn],vis[maxn],blo[maxn],l[maxn],r[maxn],belong[maxn];
bool cmp(node a,node b)
int query()
void init()
void solve(){
sort(q+1,q+m+1,cmp);
int l(1),r(0);
up(i,1,m){
while(q[i].y>r) updata(a[++r],1);
while(q[i].yl) updata(a[l++],-1);
while(q[i].x
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分別放入這個表,最後從小到大詢問每個...
BZOJ 3585 mex 莫隊演算法 分塊
題目大意 給定乙個長度為n的陣列,m次詢問某個區間內的mex值 怒寫莫隊233 將權值分成 n塊,記錄每個權值的出現次數以及每塊內有多少權值出現過 修改o 1 即可完成 查詢時首先掃一遍找到第乙個塊內有沒有覆蓋的點的塊 然後在塊內暴力查詢 時間複雜度o n 套個莫隊 總時間複雜度o m n incl...