日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 5710. 【北大夏令营2018模拟5.13】Mex

發(fā)布時間:2025/3/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5710. 【北大夏令营2018模拟5.13】Mex 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Description

在組合游戲中計算狀態(tài)的 SG 值時,我們常常會遇到 mex 函數(shù)。mex(S) 的值為集合 S 中沒有出現(xiàn)過的最小自然數(shù)。例如,mex({1,2}) = 0、mex({0,1,2,3}) = 4。
給定長度為 n 的序列 a。現(xiàn)有 m 次詢問,每次給定 l 和 r,詢問區(qū)間 [l,r] 的數(shù)構(gòu)成的集合的 mex 值。

Input

輸入數(shù)據(jù)的第一行包含三個整數(shù) n、m 和 t,其中 t 為 0 或者 1,表示數(shù)據(jù)類型。
接下來一行,包含 n 個非負(fù)整數(shù),為序列 a。
接下來 m 行,每行描述一個詢問。第 i 行包含兩個正整數(shù) l 和 r,代表第 i 次詢問的區(qū)間的左右端點。如果 t = 1,則詢問進行了加密,從第二個詢問開始,讀入的 l 和 r 異或前一次詢問的答案才是真正的詢問左右端點。

Output

對于每個詢問,輸出一行,代表詢問區(qū)間的 mex 值。

Sample Input

5 4 0
2 1 0 2 1
3 3
2 3
2 4
1 2

Sample Output

1
2
3
0

Data Constraint

Solution

  • 考慮用主席樹的在線做法。

  • 主席樹中以值域為下標(biāo),存的值為 min{max{posv}}min{max{posv}}

  • 即當(dāng)前這個值最后出現(xiàn)的位置在哪里,所有位置的最小值。

  • 那么我們查詢區(qū)間 [l,r][l,r] 的時候,就查找第 rt[r]rt[r] 棵主席樹,

  • 如果左區(qū)間的值 l≥l ,說明左區(qū)間所有值在詢問區(qū)間中都出現(xiàn)過, 就不可能成為答案,

  • 于是就遞歸右區(qū)間,否則遞歸左區(qū)間。

  • 有個小優(yōu)化:當(dāng)讀入的 ai>nai>n 那它肯定不會成為答案,就干脆不加入了。

  • 動態(tài)開點,時空復(fù)雜度都是 O(N?log?N)O(NlogN)

Code

#include<cstdio> #include<cctype> using namespace std; const int N=2e5+5; struct data {int p,l,r; }f[N*19]; int tot,ans,num,pos; int rt[N]; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } inline void write(int x) {if(x>9) write(x/10);putchar(x%10+'0'); } inline int min(int x,int y) {return x<y?x:y; } void insert(int pre,int &v,int l,int r) {f[v=++tot]=f[pre];if(l==r){f[v].p=pos;return;}int mid=l+r>>1;if(num<=mid) insert(f[pre].l,f[v].l,l,mid); else insert(f[pre].r,f[v].r,mid+1,r);f[v].p=min(f[f[v].l].p,f[f[v].r].p); } int query(int v,int l,int r) {if(l==r) return l;int mid=l+r>>1;if(f[f[v].l].p>=pos) return query(f[v].r,mid+1,r);return query(f[v].l,l,mid); } int main() {freopen("mex.in","r",stdin);freopen("mex.out","w",stdout);int n=read(),m=read(),t=read();for(int i=1;i<=n;i++){num=read();if(num<=n) insert(rt[i-1],rt[pos=i],0,n); else rt[i]=rt[i-1];}while(m--){int l=read(),r=read();if(t) l^=ans,r^=ans;pos=l;ans=query(rt[r],0,n);write(ans),putchar('\n');}return 0; } 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的JZOJ 5710. 【北大夏令营2018模拟5.13】Mex的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。