专栏文章

CF1935

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio0ep7d
此快照首次捕获于
2025/12/02 11:19
3 个月前
此快照最后确认于
2025/12/02 11:19
3 个月前
查看原文

CF1935

E

Solution

首先考虑每一对 (xi,yi)(x_i,y_i),将其二进制分解。
其中 xix_iyiy_i 的公共前缀一定会对答案产生贡献,这部分可以用 st 表维护区间 or,计为 dd
对于剩下的部分,考虑 yiy_i 的第 jj 位为 11,由于 or 的性质,我们可以对 yiy_i 的每一位分别考虑其贡献 2j2^j 还是 2j12^j-1
从高位到低位贪心,设 cjc_j 表示询问区间内有多少个 yiy_i 的第 jj 位为 11 且不在与 xix_i 公共前缀内,若 dd 的第 jj 位为 11,则令 cjc_j 额外加上 11
  • cj2c_j\ge 2,此时令一个贡献 2j2^j,一个贡献 2j12^j-1,得到答案。
  • cj=1c_j=1,贡献 2j2^j 最优。
  • cj=0c_j=0,无法产生贡献。
cjc_j 可以用前缀和维护,时间复杂度 O(nlogn)O(n \log n)

F

Solution

对于第 ii 个点,所加的边一定是度数减 11 条。
我们一定是尽可能加代价为 11 的边,定义 mxmx 为与 ii 相连的连通块内编号最大的点,mimi 为编号最小的点,有如下构造方案。
  1. i=1i=1nn,则所有连通块在可行时连 mxmx+1mx \rightarrow mx+1
  2. 若对于所有连通块 xx,不存在 mix<i<mxxmi_x<i<mx_x,即所有连通块编号在 ii 两侧,我们将其分为左右集合,对于左集合右集合内部,用方案 11,再连边 i1i+1i-1 \rightarrow i+1
  3. 若对于所有连通块 xx,存在 mix<i<mxxmi_x<i<mx_x,则将所有 mxx<imx_x < i 分为左集合,其余分为右集合,对于左集合,连 mimi1mi \rightarrow mi-1,右集合,连 mxxmxx+1mx_x \rightarrow mx_x+1。由于 11 可能在左集合,这样会连一条边。我们找到右集合 mimi 最小值,连 mimi1mi \rightarrow mi-1。容易证明这样不会连成环。
mi,mxmi,mx 可以用换根 dp 求出。

评论

0 条评论,欢迎与作者交流。

正在加载评论...