关于 mex
关于 mex
1.在位置 插入一个数 。
2.询问 的 mex。
可以考虑进行一个二分。二分区间 内的数是否都出现过。这个可以把 的数拎出来,考虑算出它们的前驱,维护区间 min,对于询问区间 ,倘若 有一个位置的前驱在 左侧,就说明这个数没有在 中出现过,否则就可以。整体二分可以做到两只 log。
这是对于 mex 问题我们的第一种思路,就是二分。
另一种思路是逆向思考。我们发现 mex 的插入每次复杂度是均摊的,这不够好,但是倘若我们删除呢?每次操作就是把答案跟删为 的数取个 min,是 的,这很好。
上面那道题就有另一种做法了,我们考虑对操作分块,每一块内先假装是这一块的结尾的状态,然后把不在这个区间内的数删掉。配合根号平衡可以做到单根号。
mex 问题还有另一个入手点,就是刚刚说的均摊。例如 Ynoi2015 我回来了。
当然,倘若给你一个集合让你支持动态插入删除,然后查 mex,这个可以做单次 ,考虑用 set 维护不存在的值即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通