给你一个长度为n的数列,元素编号1到n,第i个元素值为Ai。现在有m个形如(L,R)的提问,你需要回答出区间[L,R]的mex值。即求出区间[L,R]中没有出现过的最小的非负整数。 该问题被称为区间Mex问题,这个问题的解法多种多样,下面给出3种不同解法。 离线+线段树维护 由于没有修改操作,我们可以考虑离线。 对...
区间mex 问题 可以考虑一下 P2709 的做法。 先用莫队取下出现在[li,ri][li,ri]的位置的数,存进树状数组,然后二分求得区间和ask(x)=xask(x)=x的最大xx就是答案。 注意00不能加入树状数组,于是先给所有数加11。 块长取n0.55n0.55最佳。 #include<bits/stdc++.h>usingnamespacestd;constintN =200010...
若知道所有数字最后出现的位置,对于查询区间[l, r], num最后出现的位置pos小于l的话,则[l,r]一定不含num,pos大于r的话,就不知道了。 使用主席树,对于区间[l,r]查询rt[r],则可以避免pos大于r的情况 维护权值线段树,值是权值最后出现的位置。 样答案就可以在rt[r]根的树上二分,找位小于l的最小的数 ...
给你一个长度为nn的数组,每次询问给出一个区间[l,r][l,r],问你用当前的区间内的任意个数,不能组成的最小的正整数是多少? 思路: 这道题其实需要解决的就是,怎么快速求出来,这个不能表示的数是多少,我们这样考虑,假设把当前给定的区间的内的数al,al+1,...,aral,al+1,...,ar按照从小到大的顺序排...
题意: 给你一个长度为$n$的序列,然后$m$个询问,你有两种操作,定义如下: \(1.\ 1\ x\ y\),即令$a_x = y$,修改操作. \(2.\ 2 \ l \ r\),表示询问你区间$[l,r]$内所有的数的$Mex$是多少,即这$r - l + 1$个数所不能组成的最小的正整数是多