关于 mex
最近偶遇一堆
- 求区间
首先有一个不好的莫队文明,点名批评一下,拓展性不好且难写且离线且跑的巨慢。
下面有两个求法:
- 可持久化值域线段树
其实就是主席树求法啦,但是为了区分做法
qwq
#define mid (l + r >> 1) struct node{ int ls, rs, lst; }hjt[N << 5]; int cnt, root[N]; void pushup(int o){hjt[o].lst = min(hjt[hjt[o].ls].lst, hjt[hjt[o].rs].lst);} void add(int pre, int& o, int l, int r, int x, int k){ hjt[++cnt] = hjt[pre]; o = cnt; if(l == r){hjt[o].lst = k; return;} if(x <= mid) add(hjt[pre].ls, hjt[o].ls, l, mid, x, k); else add(hjt[pre].rs, hjt[o].rs, mid + 1, r, x, k); pushup(o); } int qrymin(int o, int l, int r, int pivot){ if(l == r) return l; if(hjt[hjt[o].ls].lst < pivot) return qrymin(hjt[o].ls, l, mid, pivot); else return qrymin(hjt[o].rs, mid + 1, r, pivot); }
- 颜色段均摊 + 可持久化线段树
这个做法非常具有拓展性和启发性。
不妨考虑扫描线,每次把右端点
但是时间复杂度呢?实际上这个取决于分裂的次数,相当于新建段或者和合并段的次数。注意到,每次加入一个数,只有可能使得
- 极小
区间
我们定义一个区间
接下来证明这样的区间只会有
不妨考虑固定左端点
构造方法很简单,不再写了。
例题:套娃
本文作者:little-corn
本文链接:https://www.cnblogs.com/little-corn/p/18722880
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步