CF1786

A

我们显然就是要让这次亵渎的伤害最大,其它伤害单独造成。

给怪排序并看作一个直方图,发现亵渎造成的伤害是一个阶梯,横着一段,向上一格,横着一段向上一格,然后直接模拟这个阶梯的样子并求出就行了。


B

tourist 你妈死了。

每次拿两个互缺的出来换,换完了再每次拿三个互缺的换,纯属他妈恶心人。


C

考虑动态维护 A。

首先还是得维护这个排好序的 \(a\) 数组让人很难受,所以先离线排序,然后就变成更改问题而不是插入问题了。

我们称使这个阶梯无法上升的点为 “卡住”这个阶梯的点。

观察每一次插入带来的影响其实就是让这个点到之后第一个卡住这个阶梯的点的左闭右开区间的阶梯上升了一格,然后直接线段树维护每个点和阶梯顶端隔着的距离就完了,加入时在这棵线段树上二分,同时再拿一个数据结构维护区间内已经出现的点的个数就行了。


D

其实从下到上直接 dp 就完了,但是我比较蠢把自己绕晕了,所以就从上到下 dp 的(笑哭)。

一个比较有用的思维方式是从终局统计,从过程 dp。

考虑最终完整的局面 :\(i\) 条到根的路上全是败,从根到它这对应着一个单减的序列 \(a_1\dots a_n\),其中 \(a_1=1,a_n < i\) ,然后考虑一个这样的序列对应的答案,从下向上一个个选择子树就是 \(\prod \binom{2^n-a_i-2^{n-i}}{2^{n-i}-1}\) ,上面的数代表目前还可以选的数的个数:要求根是这个子树里最大的,再减去之前已经填了的数,因为 dp 的顺序可以得到。

然后让 \(f_{i,j}\) 表示从上往下填到 \(i\) 层,目前 \(a_i=j\) 所乘的系数之和就行了,转移就是从所有比它小的 \(f_{i-1,k}\) 转移过来,乘上上面那个系数,可以前缀和优化。


E 还没补。

posted @ 2023-02-06 21:41  寂静的海底  阅读(59)  评论(0)    收藏  举报