A.

构造 $()\times n$,$(\times n + )\times n$。

B.

模拟。

C.

定义 I 类点:左边没有一个比他大的。

如果起点在 $i$,左边只有 I 类点,那么这个 $i$ 是一个合法的起点。

edu 的时候写了个 rmq,感觉自闭了。

事实上只要维护前面的最大值,还有合法点的最小值可以了。

模拟。

D.

首先考虑,一个点最多被交换一次(显然)。也就是相当于改变的点的个数 / 2。

考虑 $dp_{i, j, k}$ 为前 $i$ 个里面有了 $j$ 个 1且 $k = cnt_{10} - cnt_{01}$ 时候最少需要改变几个数字。

最后答案为 $dp_{n, cnt_1, 0} / 2$。dp 可以滚动数组,能过。

没看太懂别人的做法。

E.

其实就是两个操作,之前 cf 出过一次(x

  • 走到相邻的点
  • 走到颜色相同的点

代价都是 1。

做法: 可以多源最短路,定义 $dis_{col,i}$ 表示颜色 $col$ 走到 $i$ 需要多少次操作。

最后的答案是 $\min {\min dis_{col,x} + dis_{col,y} + 1, |x - y|}$。

+1 是相同颜色间转移,**如果是相同颜色是同一个点,那么不会在这个点是最小值,而是在别的颜色走操作二的时候更新答案,或者答案就是 |x-y|**。

F.

差不多懂了 heltion 的做法。

首先我们要知道合法的括号序列有两个要求。

  • 左右括号数量相等。
  • 左括号在任何时候数量大于等于右括号。

对于第一点,题目保证了,对于第二点,把左括号看成 1,右括号看成 -1,前缀和不存在负数即可。

然后我们考虑这个题,先做一点微小处理,把相同的当成一个,也就是 map[(a, b)] += c。

我们大概可以知道,需要枚举的 $(x,y)$ 有 $n^2$ 种,

edu 场上的时候想到了应该要枚举 $k = y/x$,然后把所有的点按照权值 $a_i + b_i \times k$ 来排序,但是因为用的是实数,所以疯狂 wa 2。

然后 heltion 的做法是: 把所有 $k$ 和与 $k$ 有关的 $(i, j)$ 塞进 map 里,按照 $k$ 来排序,(k 是从小到大的)。

默认 $k = eps$,也就是直接直接按照 $a_i$ 为第一关键字,$b_i$ 为第二关键字来排序。

然后开始从小到大枚举 $k$,每次把与 $k$ 有关的所有位置提取出来(发现位置是连续的一段),并计算 $a_i + b_i \times k$,然后把相同的 $a_i + b_i \times k$ 内部先按照左括号优先的原则排好,然后计算相关的贡献。

最后权值相同的点用 $b_i$ 来排序,因为后续的 $k$ 越来越大,也就是 $b_i$ 越大权值会越大,这样可以 保证后面选择的位置也是连续的一段。