洛谷P4137 求區間mex

2022-05-07 22:00:09 字數 747 閱讀 2591

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 很套路的線段樹分治。...