【MX-S3】梦熊周赛 · 提高组 3 & FeOI Round 1

野心

题意:

给定长度为 \(n < 2 \times 10^6\) 的排列 \(a\)

求有多少个 \(i < n\) 满足 \([1, i]\)\([i + 1, n]\) 排序后都是等差数列。

我们发现不存在合法的 \(i \in [3, n - 2]\) 使得 \([1, i]\) 的公差 \(d \ge 3\)

假设 \([1, i]\) 构成 \(1, 1 + d, 1 + 2d \cdots\) 的等差序列。

后缀元素在前缀元素之间的差值为 \(1\),跨过前缀元素的差值为 \(2\),一定不合法。

需要考虑的合法情况只有:

  • \([1, i]\) 中元素恰为值域上的一个前缀或后缀。
  • 公差为 \(2\)

如果 \(i = 2\)\(i = n - 1\),构成 \([1, n][2, n - 1]\) 也是合法的。

submission

Journey

题意:
\(\text{range}(a, b, c)\) 表示序列

\[[a, a + c, a + 2c, \cdots, a + kc] \]

其中 \(k\) 是满足 \(a + kc < b\) 的最大非负整数。

给定大小为 \(n \le 2 \times 10^7\) 的数组 \(g\),求

\[\sum_{a = 1}^n\sum_{b = a + 1}^{n + 1}\sum_{c = 1}^n\sum_{i \in \text{range}(a, b, c)} g_i \]

数据范围暗示很明显了,只放过线性做法。

每个 \(g_i\) 会被 \(a + kc = i\)\(b > i\) 的三元组贡献到。

\(f(i)\) 表示 \(a + kc = i\)\((a, c)\) 对数

\[\begin{aligned} f(i) &= \sum_{a = 1}^n\sum_{c = 1}^n[a + kc = i]\\ \\ &= n + \sum_{a = 1}^{i - 1}d(i - a)\\ \\ &= n + \sum_{a = 1}^{i - 1}d(i)\\ \end{aligned} \]

因此只要把 \(d(i)\) 筛出来然后做一遍前缀和即可。

最后再乘上 \(b\)\(n - i + 1\) 种取值。

submission

再演

初始集合只要记录操作然后从当前集合回退即可。

定义上数为一对数中较大的,同理定义下数

返回的 \(p\) 是所有上数中最小的。

\(p\)\(1\) 交换,\(1\) 与原来 \(p\) 的下数 \(q\) 组成 \((1, q)\)

由于 \(p\) 已经是上数中最小的了,\(q\)\(p\) 还小,因此一定有 \(res = q\),我们称该操作将 \(q\) 暴露出来。

\(q\)\(2n\) 交换,得到 \((1, 2n)\)

无论如何 \(2n\) 不会作为返回值,因此可以把 \((1, 2n)\) 删掉,递归到一个值域为 \([2, 2n - 1]\) 的子问题。

边界情况是只有一个数对 \((n, n + 1)\),不用询问,直接返回。

这样总询问数等于 \(2n - 2\),比 \(2n - 3\) 的限制多了一次。

考虑值域为 \([n - 1, n + 2]\) 的情况,res 一定是 \(n\)\(n + 1\) 之一,我们的目的是将 \((n, n + 1)\) 凑对,因此无需 \(2\) 次操作,只需一次交换。

具体分讨见代码。submission

醒餞の鳥 (feat. Feryquitous)

枚举性质 \(k\),如果 \(i, j\) 满足 \(a_{i, k} > a_{i, k}\),那么 \(k\) 分配的系数 \(X\) 必须保证 \(i, j\) 最坏也只能排名相同(不能 \(j\)\(i\) 前面)。

贪心的把 \(1 - X\) 分配给与 \(k\) 不同且 \(a_{j, l} - a_{i,l}\) 最大的性质 \(l\),则

\[X \ge \dfrac{a_{j, l} - a_{i,l}}{a_{j, l} - a_{i,l} + a_{i, k} - a_{j, k}} \]

  1. \(O(nm^2)\)

    将所有人按照性质 \(k\) 排序,\(a_{i, k}\) 相同的 \(i\) 划分到类 \(\{a_{i, k}\}\)

    如果 \(\{s_1\}, \{s_2\}, \{s_3\}\) 是按序排好的三类人。

    使 \(\{s_3\} > \{s_2\}\) 的系数为 \(X_3\),使 \(\{s_2\} > \{s_1\}\) 的系数为 \(X_2\)

    由于不等号的传递性,我们不再需要考虑 \(\{s_1\},\{s_3\}\),需要考虑的偏序对数降到 \(O(n)\)

    考虑相邻的两类人 \(j, i\),现在要最大化 \(X\)

    \[X \ge \dfrac{1}{1 + \dfrac{a_{i, k} - a_{j, k}}{\max a_{j, l} - \min a_{i,l}}} \]

  2. \(O(n^2m)\)

    考虑枚举 \(i, j, k\)\(l\) 为等于 \(k\) 且满足 \(a_{j, l} - a_{i, l}\) 最大。

    预处理每对 \(i, j\) 最大和次大 \(a_{j, l} - a_{i, l}\) 对应的编号。(\(k\) 为最大值时用最大值转移)

    这样预处理和转移都是 \(O(n^2m)\) 的。

最后根据数据分治一下,\(m < n\) 用算法1,否则用算法2,可以做到 \(O(nm\sqrt {nm})\)

submission

posted @ 2024-08-17 19:52  Lu_xZ  阅读(129)  评论(0)    收藏  举报