P4254区间MEX
问题描述
给你一个长度为n的数列,元素编号1到n,第i个元素值为Ai。现在有m个形如(L,R)的提问,你需要回答出区间[L,R]的mex值。即求出区间[L,R]中没有出现过的最小的非负整数。
输入格式
第一行,两个整数n和m
第二行,n个空格间隔的整数,表示数列A
接下来m行,每行两个整数L,R,表示一次询问
输出格式
m行,每行一个整数,表示对应询问的答案。
样例输入
7 5
0 2 1 0 1 3 2
1 3
2 3
1 4
3 6
2 7
样例输出
3
0
3
2
4
提示
1<=n,m<=200000
0<=Ai<=200000
1<=L<=R<=n
由于没有修改,可以考虑离线算法。先将询问按照左端点排序。
令$S[i]$表示区间$[1,i]$的$MEX值$,容易发现$S[i]$单调不降,并且可以$O(n)$的处理出来$S$数组。那么左端点为1的询问都可以处理,然后考虑如何处理左端点为2时
考虑删掉$A[1]$对$S$数组的影响,那么令$x=A[1]下一次出现的位置$,那么$S[x]$以后肯定不会受到影响,而对于$x$之前的$S[k]$
如果$S[k]>A[i]$,那么$S[k]=A[i]$,否则不变
那么区间修改用线段树来维护,按照左端点升序讨论即可。
代码:
1 |
|