小W与伙伴招募
可以将题意转换为每天商店会对第
i
i
i 个商品补充
b
i
b_i
bi 个。
贪心地,优先用便宜的方案,如果能二分的话那么复杂度再补充库存上,在线段树上维护两个东西 ( k × b i , r i ) (k \times b_i, r_i) (k×bi,ri),表示这个位置的库存是 k × b i + r i k \times b_i + r_i k×bi+ri。
每次先补充一下库存,相当于对 k k k 区间加。然后线段树二分找到 p p p 表示 1 ∼ p − 1 1 \sim p-1 1∼p−1 的库存都花完,这样 1 ∼ p − 1 1 \sim p - 1 1∼p−1 可以区间覆盖为 0 0 0, p p p 位置查询一下再单点修改。
注意,维护的线段树不是同时支持加法和乘法的,它们间是相互独立的,所以拆成两棵线段树一起维护也可以。
小W与制胡串谜题
原题。给定 n n n 个字符串,将它们拼接在一起使得字典序最小。
直接的想法是按字典序拼接,但不会那么简单的
hack
aa
aba
不过你这样就好了
bool cmp(string a, string b) {
return a + b < b + a;
}
小W与屠龙游戏
一道 noip 大概不考的博弈论。题意有点绕,人话翻译一下。
有 2 n 2n 2n 堆石子,分成 n n n 对,每一对中石子堆的石子个数是相同的。后手先选一个非空的集合(不必要把一个对的全选),然后双方轮流进行操作:每次选择一堆石子取任意个石子。或选择两堆石子,分别在两堆石子里取任意个石子。最后一个不能操作者失败。
如果双方都采用最优操作,对于每个对的前缀,你需要求出在它情况下进行游戏先手的最大得分,得分定义为在获胜的前提下选的石子个数,如果失败则本轮没有得分。
强制在线。 1 ≤ n ≤ 5 × 1 0 5 , 1 ≤ x i ≤ 1 0 18 , 1 ≤ y i ≤ 1 0 9 1 \le n \le 5 \times 10^5, 1 \le x_i \le 10^{18},1 \le y_i \le 10^9 1≤n≤5×105,1≤xi≤1018,1≤yi≤109