A

考虑存在 ai=100a_i=100 的情况,那么对于所有的 0k<100n0\le k< 100n(其中 k=100nk=100n 的情况是平凡的)总可以通过令 xi=kmod100x_i=k\bmod 100,剩下随便选 k/100\lfloor k/100\rfloorjij\neq i,令 xj=ajx_j=a_j,就是一个解。

如果不存在 ai=100a_i=100 的情况,那么 k=1k=1 就凑不出来。

复杂度 O(n)O(n)

B

由于允许操作的区间长度是奇数,不难看出奇数位置的元素只能在奇数位置之间流动,偶数同理。

并且,如果 pq(mod2)p\equiv q\pmod 2,我们总可以通过一次交换把 p,qp,q 互换。

那么我们只需关心 xix_i 的奇偶性。令 s0s_0 为子序列 a2,a4,a6,a_2,a_4,a_6,\dotss1s_1 为子序列 a1,a3,a5,a_1,a_3,a_5,\dots

ti=ximod2t_i=x_i\bmod 2,那么每一次操作我们必须在 stis_{t_i} 中标记一个元素,记答案初始为所有元素之和。

  1. 如果 stis_{t_i} 的元素都没有被标记过,显然我们会标记最大的元素,令答案减去这个元素;
  2. 如果 stis_{t_i} 存在被标记过的元素,那么如果存在没被标记过的正整数,就标记最大的正整数,这样答案减去的最多;否则任意标记一个已经被标记过的元素,答案保持不变。

复杂度主要在于排序,为 O(nlogn)O(n\log n)

C

首先不难看出这是一个 dpdp,关键在于我们不知道所有子区间的中位数是谁。

假设知道这个中位数是 xx,那么设 dpidp_i 表示 ii 结尾的所有合法划分中,最多的子区间个数,转移为 dpi=max0j<i{dpj+1}dp_i=\max_{0\le j<i}\{dp_j+1\},其中 aj+1aia_{j+1}\sim a_i 的中位数是 xx,并且 iji-j 为奇数。

给定的 nn 总是奇数,而这个 dpdp 似乎并不依赖于 nn 的奇偶性,这就意味着一定存在某种性质。

假设每一个子区间的中位数都是 xx,由于子区间的长度为奇数,子区间的长度之和 nn 也为奇数,那么一定有奇数个子区间。

既然一共有奇数个子区间,那么这些子区间并起来的中位数就一定等于 xx,这个结论简单画图即可得出。

也就是说 xx 是可以直接求出来的,那么复杂度就是 dpdp 转移的复杂度,为 O(n2)O(n^2)

注意,这个转移并不一定是求出 aj+1aia_{j+1}\sim a_i 的中位数,因为动态求中位数一般来讲会用对顶堆,复杂度会多一个 log\log;而这里我们是判断中位数是否为 xx,只需要记一下比 xx 大和比 xx 小的元素个数,然后它们都 (ij1)/2\le (i-j-1)/2 就是中位数为 xx 的充要条件。

D

Si=k=inakS_i=\sum_{k=i}^n a_k,那么一个逆序对 (i,j)(i,j) 的贡献就是 SiSjS_i-S_j

对于每一个 pip_i,我们都希望所有 j>ij>iSiSj>0S_i-S_j>0jj 都满足 pi>pjp_i>p_j;所有 j>ij>iSiSj<0S_i-S_j< 0jj 都满足 pi<pjp_i<p_j

如果能做到这一点,显然此时 i<j,pi>pjSiSj\sum_{i<j,p_i>p_j}S_i-S_j 就会取到最大值,因为每一个位置 iiSiS_i 是固定的。

事实上也确实可以做到,只需要令 SiS_ipip_i 的相对大小保持一致即可,也就是说,我们给 (Si,i)(S_i,i) 这个二元组按照字典序排序,然后按照排序后的位置从 1n1\sim npip_{i} 赋值即可。

这样的话,每一个位置 ii,对于 j>ij>i,总是满足 Sj<SiS_j<S_i 时有 pj<pip_j<p_iSj>SiS_j>S_i 时有 pj>pip_j>p_i

复杂度 O(nlogn)O(n\log n)

E

没想到这个交互我能做出来,下面令 I(x)I(x) 表示询问 I xQ(x)Q(x) 表示询问 Q x

由于 c0c\neq 0,那么这三种操作中最特殊的 xx 必然是 00,因为 k=1k=1f(0)=0f(0)=0k1k\neq 1f(0)=cf(0)=c

因此第一步我们令 a=0a=0,然后询问 I(0)I(0) 区分出 k=1k=1 还是 k=2,3k=2,3

如果 k=1k=1,此时 S={0}S=\{0\},我们只需要询问 I(20),I(21),,I(2n1)I(2^0),I(2^1),\dots,I(2^{n-1}) 即可。由于 f(2i)f(2^i) 不是 00 就是 2i2^i,所以根据 II 的返回值我们总能正确判断出 cc 的第 ii 位是 00 还是 11

如果 k=2,3k=2,3,此时 S={0,c}S=\{0,c\},我们询问 I(2n1)I(2^n-1)

  1. 如果 SS 不变,说明 c=2n1c=2^n-1,此时我们只需询问 I(1)I(1) 即可区分出 k=2k=2 还是 k=3k=3

  2. 如果 SS 变了,说明 c2n1c\neq 2^n-1,但是还是有两种情况:

    1. k=2k=2,此时 S={0,c,2n1}S=\{0,c,2^n-1\}
    2. k=3k=3,此时 S={0,c,¬c}S=\{0,c,\neg c\},其中 ¬c\neg c 表示 ccnn 个二进制位按位取反。

    由于 c2n1c\neq 2^n-1c0c\neq 0,所以无论是 cc 还是 ¬c\neg c 都一定是既有 00 又有 11,所以 c,¬c<2n1c,\neg c<2^n-1,因此询问 Q(2n1)Q(2^n-1) 就可以区分出 k=2k=2 还是 k=3k=3

    1. k=2k=2,我们通过二分区间 l=1,r=2n2l=1,r=2^n-2 就可以找到 cc

    2. k=3k=3,我们并不知道 cc¬c\neg c 哪一个大。

      假设我们可以二分找到其中一个值,此时我们仍需要判断得到的是哪一个。

      假设我们二分出的是 rr,那么 f(c)=0Sf(c)=0\in Sf(¬c)=2n1∉Sf(\neg c)=2^n-1\not\in S。所以询问 I(r)I(r) 即可区分出 cc¬c\neg c

      但是这里还有一个问题,不算二分次数,我们已经用掉了 44 次询问,然而题目要求我们使用 n+3n+3 次询问,如何解决?

      由于 cc¬c\neg c 一定有一个人最高位为 11,所以我们二分区间设置 l=2n1l=2^{n-1}r=2n1r=2^n-1 即可少一次二分。

复杂度 O(n)O(n)

F

1n1\sim n 的图为 GG1q1\sim q 的图为 GQG_Q,那么要做的就是在 GQG_Q 这个完全图上求最小生成树,其中边 (i,j)(i,j) 的权为 dis(ci,cj)dis(c_i,c_j)

考虑 GxG_xGG 删掉边权为 xx 的所有边后构成的图,那么 dis(u,v)=min{x(u,v) is connected in Gx}dis(u,v)=\min\{x\mid (u,v)\text{ is connected in }G_x\}

反过来看,如果我们可以从小到大遍历 x=0m+1x=0\sim m+1,并且把 GxG_x 中所有连通块对应到 GQG_Q 中的点也连通起来,就等价于执行 Kruskal 算法。

问题是朴素遍历是 O(mn2)O(mn^2) 的,显然无法通过本题。

观察 GxG_x删除边权为 xx 的所有边,删除并且维护连通性并不简单,但是我们可以用线段树分治,将删除一条边,变为一条边只在某个区间中出现。

那么考虑暴力遍历 GxG_x 中所有连通分量的操作,就等价于我们在 GxG_x 对应的并查集合并的过程中,把 GxG_x 并查集对应的 GQG_Q 中对应的点也合并起来。

在实现上,我们需要将 GxG_x 对应的并查集节点 uu 添加一个 rur_u 属性,表示 GxG_x 的点 uu 对应在 GQG_Q 的并查集的点是谁,如果不存在则为 00。在合并 GxG_x 对应并查集的过程中,我们应当同时合并 GQG_Q 对应的并查集。注意特殊处理 r=0r=0 的情况。

这里可以看作 rur_u 是一个等价类的集合,只不过只存储了这个等价类的某一个元素,那这里的处理就比较显然了,只要从集合合并的角度去理解即可。

n,m,qn,m,q 视作同阶,复杂度 O(nlog2n)O(n\log^2n),其中一个 log\log 是线段树分治,另一个 log\log 是可撤销并查集。