清華集訓2014 mex

2022-08-18 05:15:09 字數 790 閱讀 3703

有乙個長度為n的陣列。m次詢問,每次詢問乙個區間內最小沒有出現過的自然數。

顯然,當\(a_i>n\)時,對答案沒有影響,所以全部視為n+1。

有兩種方法,主席樹和權值線段樹。

主席樹裸題,就講權值線段樹。

首先將詢問按r排序,將1~r的\(a_i\)全部加入權值線段樹,記錄它最晚出現的位置,對於每個區間記錄這個區間中每個數最晚出現的位置的最小值mn。

查詢乙個l,當\(該區間左兒子的mn,顯然左兒子中有個\(a_i\)不在區間[l,r]中,就查詢左兒子,否則查詢右兒子。

#include #include #include #include #include #include #include const int maxlongint=2147483647;

const int mo=1000000007;

const int n=200005;

using namespace std;

int a[n],pos[n*5],mn[n*5],n,m,ans[n],lim;

struct ddx

re[n];

bool cmp(ddx x,ddx y)

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

sort(re+1,re+1+m,cmp);

lim=1;

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

ans[re[i].z]=find(0,n+1,1,re[i].x);

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

}

清華集訓2014 mex

有乙個長度為n的陣列。m次詢問,每次詢問乙個區間內最小沒有出現過的自然數。考慮用線段樹維護,維護什麼?我們把這些點分布在數軸上,那麼我們要在這個數軸上找到答案,就要把區間轉換到數軸上,也就是要維護每個數的下標。那麼滿足維護這個東西的,可以用權值線段樹。這樣,我們可以衍生出兩種做法 離線做法 把所有的...

清華集訓 2014 玄學

update text update 我之前講的是個什麼鬼 如果想看看人話版本 戳這。感覺自己被坑騙了。題目明明寫了所有資料不超過int,敢情是輸入資料不超int?迷惑行為 題目感覺有點繞,我盡量 不口胡。首先我們搞一顆線段樹1,樹表示插入序列的編號。如,在q行中第i個出現插入操作 其實拿到這道題我...

46 清華集訓2014 玄學

一開始腦子進水了 把這題想簡單了 複雜度算錯了 每次都用nlogn的時間修改 而且還狂寫stl 然後就直播自爆8小時qaq。先掛個5分 include include include include include includeusing namespace std define rep i,j,...