数据结构题目练习。
I P10690 Fotile 模拟赛 L
首先有显然的 可持久化 Trie,但是暴力是 ,找不到奇妙东西维护,我们就 大力分块,设块长为 ,则我们预处理 表示从第 块开头到 点的最大异或和,复杂度 ,查询中,对于整块直接拿,对于散块,我们暴力查询,复杂度 。
总复杂度 。
代码
II P4587 [FJOI2016] 神秘数
首先我们考虑神秘数的性质,一个集合 ,我们将其排序后从小到大枚举,假设当前神秘数为 ,上次神秘数为 (若没有则为 ),当前枚举值为 ,则相当于所有值都可以向右平移一段 的区间。
- 若 ,则平移后的区间可以覆盖到 ,则应该使 。
- 否则,平移后的区间一定不可以覆盖到 ,且 集合剩余值也不可以,直接结束即可。
上述复杂度是 的。
证明:若 ,则会使 至少加 ,则相当于 每次扩大 两倍,即复杂度为 。
查询区间 且值域在 之间的权值和,可用主席树解决。
复杂度 。
代码
III P3247 [HNOI2016] 最小公倍数
首先可以不是简单路径,这启示我们用并查集,但 的二维限制有些不可做,我们可以先想暴力,对于每个询问只需将所有 且 的所有边加入并查集,并维护最大 值,判断 是否在一个联通块内,且最大值即为 ,这样可以 。
限制太特殊了,我们考虑分块,首先将所有边按照 排序后分块,每个询问离线下来后把其放到尽量右块内,使所有其左边的块的 值都小于等于它,然后我们枚举每个块,将该块询问先按照 排序,再将前面的块按照 排序,双指针加边即可。
对于在该块内的边,我们暴力枚举加边,枚举后撤销这些操作,所以 并查集不能路径压缩,只能按秩合并。
复杂度 ,取 得复杂度为 。
但是貌似 跑的最快 : )。
代码
``
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现