A Winding polygonal line
神仙构造。
考虑拿凸包上一个点 $A$ ,然后每次找一个点 $B$ ,如果是 L
,则使得剩下的所有点都在 $AB$ 的左侧,然后连过去即可,否则就使得所有点都在 $AB$ 右侧。不难发现这样每一轮都一定能找到剩余点继续,且由于所有点都在一侧,显然不可能出现线段相交。
复杂度 $O(n^2)$ 。
B Distinctification
考虑给定一段序列怎么算出答案。不难发现对于一个 $A_i$ ,我们一定会找到一个最大的 $k$ 满足 $[A_i,A_i+k-1]$ 的数的个数正好是 $k$ ,然后把这些数进行操作使得这些数互不相同。
我们定义一个方案的权值为 $\sum_i A_iB_i$ ,那么最终需要花费的代价是 $W_e - W_s$ ,而我们希望这个代价尽量小,也就是最小化最终状态的代价。而且不难发现,在题目的条件下,一定可以将 $A_i,B_i$ 变成 $k,B_i$ 其中 $k \in [A_i,A_i+k-1]$ 。具体为啥想一想就会发现这个方案非常容易构造,可以先任意得到一个每个数不同的方案,然后一个一个归位即可。
所以考虑 $B’_i$ 为 $B$ 中第 $i$ 大的东西,于是要算的就是
于是我们就可以 $O(n)$ 回答一次询问了。然后就是考虑插入一个 $(A_i,B_i)$ ,我们可以拿 set
维护连续段,即之前说的 $A_i,A_i+k-1$ 这种段每个段拿一个权值线段树维护 $B_i$ ,同时维护 $\sum iB_i$ 这个东西,于是插入一个数后就会把一些连续段合并,合并直接上线段树合并即可。复杂度 $O(n\log^2 n)$ 。
C AUOJ 837 博弈
我们倒着考虑这个过程,来手玩一下样例 5 20 3
输出 3 4 3 4 3
。
考虑什么样的状态是终止状态,显然 0 0 0 0 0
会导致结束。然后,
- 当 $m$ 仅剩 $2$ 时(此时 $2$ 作为提出者),无论怎么提出方案,必然有人会获得 $0$ ,这种人会否决这个方案,于是会进入状态
0 0 0 0 0
。 - 当 $m$ 为 $5$ 时(此时是 $1$ 作为提出者),可以提出方案
1 1 1 1 1
,这样必然优于继续下去的0 0 0 0 0
,于是这就是一个终止状态。 - 当 $m$ 为 $8$ 时(此时是 $5$ 作为提出者),无论怎么提出方案,都会有人只得到 $1$ ,他会否决方案,因此终止态一定仍然是
1 1 1 1 1
。 - 当 $m$ 为 $11$ 时(此时 $4$ 作为提出者),他首先肯定会给每个人相较于之前的方案多分配一个,这样可以保证大家都同意这个方案,然后剩下的肯定会私吞,于是就是
2 2 2 3 2
。 - 当 $m$ 为 $14$ 时,此时必然会有人只能得到 $2$ ,会否决方案。
- 当 $m$ 为 $17$ 时(此时 $2$ 为提出者),他首先肯定会相较之前多分配一个,然后剩下的私吞,于是就是
3 4 3 4 3
了。 - 当 $m$ 为 $20$ ,此时会被否决。
所以最终答案就是 3 4 3 4 3
。
然后按照这样的思路去模拟,就有了一个 $O(\frac m n)$ 的优秀做法,可以获得 $80$ 分。
考虑优化这个,因为第一步之后每一步都会往前推 $\lfloor \frac n k \rfloor$ 个人,因此循环节是 $O(n)$ 的,所以直接推循环节即可,复杂度 $O(n)$ 。