AGC040

A

对于一个 >< 设为 \(0\),然后其他设成两边距离较大值即可。

B

先按照 \(r\) 排序,当有一边的答案为空集的时候答案是最长线段的长度,否则答案可以描述成 \(r_{\min}-l_{\max}\),注意到 \(r\) 最小值会作为某个集合的 \(r_{\min}\),枚举另一个集合的 \(r_{\min}\) 设为 \(r'\),然后将 \(r\sim r'\) 之间的 \(l\) 都丢到 \(r\) 处,剩余的如果满足存在 \(r\le l\le r'\) 则丢给 \(r'\),然后处理完之后其余 \(l\) 往其中一边 \(r'/r\) (对应 \(l\) 较大的一边)丢即可。

C

首先黑白染色,把偶数位上的 A 变为 B,B 变为 A,会发现原问题变为每次你可以删除一个非 AA 或 BB 的串。

然后显然的结论是只要 A 和 B 的数量分别不比 \(\frac{n}{2}\) 大即可。这样容斥计算答案的话只有一种可能超出,减掉即可。复杂度 \(\mathcal O(n)\)

D

显然有一个前缀会满足 Alice 能够抓到 Bob,接着我们不妨假装我们二分了一个整数位置 \(x\) 且 Alice 希望他能够抓到 Bob,那么 \(x\) 之前的石板仅有 \(A\) 有贡献,而之后的石板,对于答案的贡献仅关乎 \(B-A\)

\(F\)\(\sum \max(B-A,0)\),则简单讨论可以发现每次将一个数放到前面的时候会令 \(F\) 减去 \(\max(A,B)\),我们按照此值排序,可以确定 \(x\)

考虑确定小数部分,讨论第 \(x+1\) 位放入的石板是 \(A-B\) 为正还是 \(B-A\) 为正并分别算出贡献即可,具体实现上需要分类讨论这一位放入的数是否排名为前 \(x+1\) 大。复杂度 \(\mathcal O(n\log n)\)

E

考虑只有操作 1 的情况下答案是 \(\sum [a_i<a_{i+1}]\)(开头结尾补 0),然后考虑添加操作 2,可以发现某类操作相交的 Part 可以调整掉,于是问题等价于将原序列拆分为 \(a_i+b_i=c_i\) 最小化 \(\sum [a_i<a_{i+1}]+\sum [b_i>b_{i+1}]\)

我们考虑设 \(f_{i,j}\) 表示 \(a_i=j\) 的情况下的答案,直接做复杂度为 \(\mathcal O(nw)\)

我们的一个观察是 \(a_i\) 越大往后转移越优,而相应的其 \(f_i\) 显然也更大。但不难发现 \(f_{i,0}+2\ge f_{i,A_i}\),因此我们只需要维护拐点即可。复杂度 \(\mathcal O(n)\)

F

先转换一下,考虑二元组 \((j,d)\) 描述了 \(j,j-i\) 的值,那么操作改为:

  1. \(j+1\)\(d+1\)
  2. \(d=0\)
  3. \(d\ge 2,d\leftarrow d-1\)

我们考虑只有操作 1,3 的情况下进行计数与卡特兰数的计算是几乎一致的(只需要保证 \(d\ge 1\) 即可)

而对于任意一个合法的操作序列,删去所有操作 2 都仍然是合法的。

我们考虑如何给这些操作插入 2 操作,我们可以观察到,如果某个点之后的所有 \(d_i\)严格大于此处的 \(d_i\) 那么这里就可以插入 2 操作(如果相等那么某一步操作将转换为操作 2,与我们仅考虑操作 1,3 是矛盾的)。

我们接着考虑设操作 3 进行了 \(K\) 次,首先操作 \(1\) 的次数确定为 \(B\) 次,我们需要到达 \((B,B-A)\) 的位置,那么最后一次设插在 \((x,y)\) 处,则此时进行了 \(x-y\) 次操作 3,那么就有最终的位置 \(y'=B-A=B-x-(K-(x-y))\)\(A=y+K\to y=A-K\),即纵坐标固定。

我们知道我们最终到达的坐标为 \((B,B-K)\),一个观察是 \(0\sim B-K\) 中的每个纵坐标都应当出现至少一次,那么对于每个坐标,我们找到其最后出现的位置,这个位置就是能够任意插入操作 2 的位置。

于是这种合法的位置必然有 \(A-K+1\) 个,使用插板法计算答案即可。

复杂度 \(\mathcal O(n)\)

posted @ 2021-06-22 22:26  Soulist  阅读(119)  评论(0编辑  收藏  举报