n個數 給m個詢問
每個詢問問這個區間的自然數mex
很久以前做得 有些忘了
首先我們要離散化
mex只可能是 0 a[i] a[i]+1
我們把這些值離散化 然後用主席樹維護每種值出現的最晚位置 取min
詢問就是 在r的這顆樹上面 出現最晚位置小於l的最小值 直接在主席樹上二分即可
#includeusing namespace std;
const int n = 4e5+100;
int a[n],n,m;
int has[n],tot;
int rt[n],t[n*23],ls[n*23],rs[n*23],cnt;
inline int in()
void update(int &o,int las,int l,int r,int pos,int v)
int mid = l+r>>1;
if(pos<=mid) update(ls[o],ls[las],l,mid,pos,v);
else update(rs[o],rs[las],mid+1,r,pos,v);
t[o]=min(t[ls[o]],t[rs[o]]);
}int query(int o,int l,int r,int ql)
int main()
for(int i = 1; i <= m; i++)
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出現...
洛谷 P1440 求區間最小值
傳送門 這道題目一眼看去,先想到的必然是暴力,但是資料範圍m n 2000000 太嚇人,所以放棄這個想法,那麼我們一步步分析樣例是如何得來的 6 27 8 1 4 3 207 7113 因為第乙個數前面沒有數,輸出0 第二個數之前的最小數為7,輸出7 第三個數之前2個的最小數為7,輸出7 第四個數...
洛谷P5631 最小mex生成樹
給定 n 個點 m 條邊的無向連通圖,邊有邊權。設乙個自然數集合 s 的 text 為 最小的 沒有出現在 s 中的自然數。現在你要求出乙個這個圖的生成樹,使得其邊權集合的 text 盡可能小。n leq 10 6,m leq 2 times 10 6,w i leq 10 5 很套路的線段樹分治。...