专栏文章
CXOI R5 题解
个人记录参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @min60tym
- 此快照首次捕获于
- 2025/12/01 21:08 3 个月前
- 此快照最后确认于
- 2025/12/01 21:08 3 个月前
A
提示 1
不同的左链链顶数量其实是路径上为其父亲右儿子的点数量加一。
提示 2
一个点不可能被操作两次。
正解
考虑算出交换每一个点对答案产生的价值变化量,按照其排序,贪心选取在一定次数以内的最大的一些整数就好了。
注意答案可能超过 int 范围。
B
提示 1
无法获取 具体的值,而变量位只有一个,意味着二分法等方法完全失效了,那应当采用什么方法呢?
正解
牛顿迭代可以解决此问题。
具体来说,我们取一个初始值 ,根据牛顿迭代的式子:
构造函数 ,那么:
转化为计算器语言如下:
MR * MR - N / 2 / MR = M- 重复此过程若干次可以通过此题。
C
提示 1
不考虑权值的限制如何做?
提示 2
不考虑权值限制时,将排列划分成若干个升序连续段,则含有逆序对的区间表示出来是怎样的?有什么性质?
提示 3
权值的意义到底是什么?
提示 4
是否存在一种满足若干升序连续段的限制,且同时使得权值最优的构造?
正解
性质 :权值是最长下降子序列。证明如下:
考虑这样一种刻画方式:令 表示当前长度为 的下降子序列中,最后一个元素的最大值。初始 。每次加入一个元素 后,考虑用其更新所有 :若 ,不能更新;若 ,那么可以用 更新 。我们注意到 是单调下降的,也就是说,实际上只有小于和大于交界处的那次更新是有用的,观察这个过程,发现这恰好和“删除 中比它小的数中最大的数”相同,所以最后的 就是最大的 使得 ,也就是最长下降子序列,于是证明成功了。
性质 :划分成若干个极长上升段(长度分别为 时,含有逆序对的区间个数为 。这个比较显然。由此我们发现,划分的连续段顺序是无所谓的。
性质 :构造 这样的序列,既可以满足划分段的条件,也可以使得其在该划分段方案中最长下降子序列最短。这个也不难证明。
至此可以直接整数划分复杂度枚举方案,可以通过本题,也可以采用更优的 dp 做法,在此不做说明。
D
正解
(以下视 同阶)
一个强连通分量内的操作情况应当是相同的,所以先缩点。
此问题严格强于 DAG 可达性,因此复杂度不可能低于 ,直接考虑先 bitset 求出两点可达性。
接下来考虑如何求出 的点权,我们可以对于每个询问找到上一个涉及 的 操作在哪,将这次操作修改成的数和此次操作之后到询问位置所有涉及 的 操作所操作的数取 gcd,就可以得到当前的点权。
于是变为两个问题:
-
找上一个涉及 的 操作:考虑维护每个位置上一次 操作的时刻,但是这个较难维护,于是将时间分块,维护到上一个整块结束时的答案,然后每次需要用到的时候在块内寻找是否有 操作,然后一个块结束后暴力拓扑排序 更新即可,这部分总时间复杂度 。
-
找一段时间区间涉及 的 操作的 gcd:同样对于时间分块,散块暴力,整块在块结尾拓扑排序更新,每次就可以直接查询,这部分总复杂度 。
前面这个东西是这样的原因是,一个数不停取 gcd 只会有 次有用的更新。
(我也不知道分析的对不对,但是不会比这个大了)
然后并没有做完,因为 大小的 bitset 会爆空间,但是发现每次只需要查询某些点到块内点的可达性,于是到每个块给这个块求一个 大小的 bitset 即可。
取 ,得最优时间复杂度应不超过 。
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...