专栏文章
题解:P14638 [NOIP2025] 序列询问 / query(民间数据)
P14638题解参与者 10已保存评论 12
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @mimyo4qo
- 此快照首次捕获于
- 2025/12/01 17:43 3 个月前
- 此快照最后确认于
- 2025/12/01 17:43 3 个月前
为什么我的线性做法常数这么大ww
观察特殊性质 ,这其实等价于区间一定跨过序列中点,明示分治。
我们先来考察如何计算跨过同时跨过 和 的区间权值最大值,设这个值是 。
不妨设 。
首先我们可以计算 表示 是左端点,并且右端点 ,长度合法的区间的权值最大值,这个可以用单调队列 求出。
容易发现 ,这是因为我们算出的所有区间都保证了跨过中点,如果一个区间其左端点 ,还跨过了在 右边的中点,很显然它就包含了 。
所以可以分治,轻松做到 。
考察怎么把这个 去掉。
我们发现分治这个结构太菜了,很难既分治又没 ,考虑上述做法更本质的一个结构。
我们知道长度 的区间一定会经过序列中点,这个结构能不能扩展?
显然是可以的,考察长度 的所有区间,在数组上将是 倍数的点标记,那么长度 任何区间经过至少一个被标记的点,这是显然的。
更进一步的考察长度 的所有区间,其恰好经过一个被标记的点。
因此,如果存在一个 ,满足 ,那么长度限制区间是 的答案就能通过统计每个标记点两边的区间的手段做到线性。
我们可以将区间长度做一个倍增分块,每块维护 时的信息。
每次查询把 拆成 个能一次计算的区间,容易发现只有左右端点会各出现一个散块,直接 算,中间的整块只要预处理出答案就行,然后需要查整块区间最大值,由于块数是 的所以是容易的,时间复杂度 。
我写了,南航机子上大样例跑了 ,而且卡不动,我希望这只是因为南航机子配置和 CCF 不一样。
相关推荐
评论
共 12 条评论,欢迎与作者交流。
正在加载评论...