机器人指令
进行 d m o d 36 0 ∘ d \bmod 360^{\circ} dmod360∘,讨论一下,发现有四个、两个、一个一循环。然后预处理前四次操作的答案即可,注意对绝对值的处理。
逛餐馆
如果能确定吃哪些餐馆,当然就是不回头依次吃。那么枚举那个餐馆一定吃,在它之前的餐馆可能吃也可能不吃,二分一下吃耗时最小的多少个餐馆,套个区间前 k k k 大数的和的线段树即可。
还有个堆的方法,就是每个餐馆能吃就吃,吃了后看看有没有超限制,如果超过了就弹出堆顶直到满足限制。
符文师
如果确定了一个数组表示对哪些牌进行操作,可以证明只要 ∑ i l i ≤ n \sum_i l_i \leq n ∑ili≤n,那么一定有方案可以做到。
然后是一个 01 背包模板。
魔法师
1 ≤ t , N , M ≤ 300000 , 1 ≤ p ≤ 1 0 9 1 \leq t,N,M \leq 300000, 1 \leq p \leq 10^9 1≤t,N,M≤300000,1≤p≤109
问题可以转换成:有 n n n 个可重集合,编号为 i i i 的集合取出前 i i i 大放入新的可重集合 S S S,需要动态维护集合的前 n n n 大的和。
对于多一本书的操作,要确定它需不要要加入 S S S 中,只要看排名是不是 < t <t <t,如果满足的话就加入 S S S 中还要把原来的第 k k k 大删掉。
少一本书的操作,看看它的排名是否 < t <t <t,如果满足就会影响答案,那么把现在的第 k k k 大加入 S S S 中。
你可能需要对每个书柜维护一个平衡树,再对 S S S 维护一个平衡树。但你可以在权值线段树中同时维护出现次数与区间和,来实现区间前 k k k 大和单点修改。