A(500)
简单的分类讨论。
B(1000)
注意到我们可以只关心最后一次收集的时间点。
又注意到 \(a_i\) 越大的位置越晚收集越好。
C(1500)
模拟一下操作就会发现:(假设 \(x \ge 2^k\))
设操作前的数为 \(p\)。如果我们进行 \(a\) 次操作 \(1\) 后再进行一次操作 \(2\)。那么最后得到的数为 \(2^k+(p>>a)\)。然后你就构造就行。
D(2250)
首先不行当且仅当序列里存在一个长度大于等于 \(3\) 的下降子序列。
这样我们就可以维护一个位置 \(i\) :
-
对于所有 \(a_j > a_i(j < i)\) 中最大的 \(j\),记做 \(l_i\);
-
对于所有 \(a_j < a_i(j > i)\) 中最小的 \(j\),记做 \(r_i\);
如果询问区间包含 \([l_i,r_i]\),那么肯定不行。
预处理每一个位置 \(i\) 的 \(mx_i\),其中 \(mx_i=\max \limits_{r_j \in [1,i]}l_j\)。
E2(3000)
首先,答案上界为 \(d=\min \limits_{i \text{ is a leaf}} dep_i\)。
当且仅当在前 \(d\) 层,每一层的节点的点权相同。
其次,答案下界为 \(d-1\)。因为我们一定可以通过调整点权,使得只在一层中出现不同的点权。
然后上结论:一定可以构造方案,使得我们在考虑整层节点时,只关心深度小于等于 \(d\) 的节点也可以得到最优解。
因为如果我们需要考虑深度大于 \(d\) 的一层节点,那么我们一定可以将其换成前 \(d\) 层中的一层,因为这样花费一定更小,答案不会更劣。
因此我们把前 \(k\) 层看做 \(k\) 个物品,其价值重量均为该层点数。如果我们可以在这些物品中选出若干个物品使得价值正好为 \(x\)。那么肯定可以取到答案上界。
如果不能呢?那么我们就考虑剩下的节点,它们可以看做是价值重量均为 \(1\) 的物品。
bitset 优化 \(01\) 背包即可。
F(3500)
看不懂,等 lg 题解。