莫队算法的复杂度需要满足 add,del 两个操作的复杂度为 O(1)。 而至此单点操作,复杂度为 O(1) 的数据结构,我们只能想到分块了Pecco:算法学习笔记(23): 分块 对于大于 3e5 的数,很明显离散化后会变,所以我们统一变成 3e5+1 for (int i = 1; i <= n; i++) { if (a[i] > 3e5)a[i] ...
mex({ai})mex({ai}) 表示在 aa 中未出现的最小自然数,其中 ai∈Nai∈N。 给一个长度为 nn 的序列 aa,mm 次查询,每次查询 mex({ai}),i∈[l,r]mex({ai}),i∈[l,r] 1、莫队+树状数组 权值树状数组维护每个数出现次数; 复杂度:O(m√nlogn)O(mnlogn) 2、莫队+分块 把权值分块,每个块维护...
线段树/莫队-区间mex查询 NKOJ4254 题目 给你一个长度为n的数列,元素编号1到n,第i个元素值为Ai。现在有m个形如(L,R)的提问,你需要回答出区间[L,R]的mex值。即求出区间[L,R]中没有出现过的最小的非负整数。 详细见NKOJ4254 总结一下这道题的三种解法 1.莫队分块,参考 NewUser 代码,非常暴力 另两...
⽆修改,求区间mex 做法1 莫队+⼆分+树状数组 树状数组维护维护桶,每次扫完⼆分答案,⽤树状数组判断 O(n√n log n)做法2 莫队+分块 分块维护桶,若块内满,则答案不在这⼀块,否则进去找 O(n√n)做法3 权值线段树+离线 预处理nxt数组(a[nxt[i]]=a[i])可以发现i+1…nxt[i]−1中不...
莫队算法Pecco:算法学习笔记(24): 莫队 统共要执行 O(n\sqrt{n}) 次添加/删除操作, n 次查询操作。 复杂度为 \rm O(n\sqrt{n}*log(n) + n*log(n)) 我们希望添加/删除操作的复杂度可以为 O(1)。 那么使用分块的做法Pecco:算法学习笔记(23): 分块 我们\sqrt{n} 一组分块 用cot[i] 来记...
无修改,求区间mexmex 做法1 莫队+二分+树状数组 树状数组维护维护桶,每次扫完二分答案,用树状数组判断 O(n√nlogn)O(nnlogn) 做法2 莫队+分块 分块维护桶,若块内满,则答案不在这一块,否则进去找 O(n√n)O(nn) 做法3 权值线段树+离线 ...
先用莫队取下出现在[li,ri][li,ri]的位置的数,存进树状数组,然后二分求得区间和ask(x)=xask(x)=x的最大xx就是答案。 注意00不能加入树状数组,于是先给所有数加11。 块长取n0.55n0.55最佳。 #include<bits/stdc++.h>usingnamespacestd;constintN =200010;intn, m, cnt[N], in[N], a[N];#...
莫队(离线) 不用说了吧... 板子题, 参考hh的项链. 主席树 (在线) 类似区间mex, 用 vivi 表示它最后一次出现的位置, 用主席树维护. 答案就是: 第 rr 棵线段树上, l≤vi≤rl≤vi≤r 的值的个数. 这显然是区间求和. 同样, 可以离线询问, 对 rr 排序, 然后用树状数组/线段树维护. 欢迎转载,但请注明...
测试地址:区间mex 做法:本题需要用到主席树。 看到本题是离线的,很多同学想到了很显然的莫队做法,或者一些奇奇怪怪的离线做法,但实际上在线做法是有的:主席树。 考虑转换条件,我们要求最小的在一个区间中没出现过的自然数,如果把原数列看做往一个空序列中一个一个..
考察part1 中的情况,启发我们使用类似回滚莫队的思想. 操作分块后把操作块内的修改作为添加操作加入.(修改可以看作删除一个数+添加一个数,这里先不做删除处理). 建一个 part1 中所述的结构. 然后扫描线,询问挂在右端点上,从右向左扫描线. 这里的操作只有删除,可以 O(1). 扫到的时候,把这个询问对应时间...