这场 vp 的太烂了/tuu,赛时 4 发罚时,还剩两分钟发现 D 的式子写错了
A. Integer Moves
能一步到位就一步到位,不行就两步。
B. XY Sequence
贪心,能加则加,不能加则减。
C. Bracket Sequence Deletion
满足两个要求之一,合法的括号串可以用栈来模拟一下括号匹配,回文串直接上双哈希。
两个操作同时进行,有一个满足就退出删掉这一段。
然后暴力枚举前缀长度判断该不该删即可,复杂度其实是 \(\mathcal O(n)\) 的。
D. For Gamers. By Gamers.
选第 \(i\) 类随从的秒伤是 \(\lfloor \frac{C}{c_i}\rfloor \times d_i\),然后击败敌人所用时间是 \(\frac{H_j}{\lfloor \frac{C}{c_i}\rfloor \times d_i}\) 。
敌人秒伤是 \(D_j\),击败我们的时间是 \(\frac{h_i}{D_j}\)。
如果我们想胜利,需要
\[\frac{h_i}{D_j} > \frac{H_j}{\lfloor \frac{C}{c_i}\rfloor \times d_i}
\]
化简一下得到
\[\lfloor \frac{C}{c_i} \rfloor \times d_i \times h_i > H_j \times D_j
\]
发现 \(i,j\) 分开了,考虑我们应该合理的处理一下左半部分,然后对于每个 \(j\) 可以单独查。
首先一定有 \(c_i | C\) ,多出来的没意义。
然后你发现数据范围是 \(1 \le C \le 10^6\) !
那就可以把 \(c_i\) 投射到值域上只留下一个最大的 \(d_i \times h_i\)。
然后枚举值域和它的倍数进行处理,这个复杂度是 \(\mathcal O(n \ln n)\) 的。
对于每个询问可以直接 upper_bound
一下。
总时间复杂度为 \(\mathcal O(n \ln n + Q \log n)\)。