专栏文章
题解:P14638 [NOIP2025] 序列询问 / query
P14638题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mimxroo1
- 此快照首次捕获于
- 2025/12/01 17:17 3 个月前
- 此快照最后确认于
- 2025/12/01 17:17 3 个月前
希望大家永远忘了我。
看见特殊性质 非常嘟嘟。这样的特殊性质只会带来一个特性:被统计进答案的区间必然包含二等分()或四等分()点。
对跨过二等分点和四等分点的区间计数,是互不冲突的。这启示我们使用分治。
对于一个分治区间,考虑跨过中点 的贡献。按照分治套路,我们用右区间来更新左区间。令左端点为 ,右端点 的最大的长度在 内的区间的和为 ,则对题目中 的贡献为 。维护这个 的方式也很简单,考虑维护一个头小尾大的单调队列,队列元素是 区间的前缀和,每次将尾部长度和左区间后缀长度之和大于 的区间 pop 掉即可。注意要同时满足长度至少为 的限制。左区间贡献右区间同理。
每个分治层 更新即可,容易证得时间复杂度 。
遗憾的是,好像过不了。
考虑分治在做什么。发现若有一个 的长度下限,那么长度 的分支区间显然没用。否则将该分治区间的中点拍在 的序列上。观察到,所有分治中点大概形成了一个 等分的序列。
实际上,我们去钦定了区间必须经过中点,可以看作在 上的关键点,一个区间合法必须跨过关键点。考虑若我们将所有 等分点作为关键点,则对于 ,这样的区间都满足经过恰好一个关键点。这样我们可以将分治区间的做法直接照搬到这个序列上。进一步的,对查询 满足 ,我们容易扫描 等分点序列实现 单次求解。
考虑把上述结论扩展。预处理所有 等分序列对单点 的贡献 。这样的序列显然只有 个。然后对每个单点位置 实现 查询 。
每次查询形如若干个整块 和散块 。其中 表示 所在的 等分序列编号。
前文提到散块可以做到 单次查询,加上每个位置做一个 区间 ,单次查询复杂度 ,所以总查询复杂度 ,加上预处理,总复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...