题目链接
做法
对于这种区间修改、单点询问的题目,可以将询问离线再扫描线。
考虑对于一个答案 $ ans_i $ 合法,当且仅当 $ (l_i + ans_i, INF) $ 中每种店上一次出现的位置不小于 $ l_i + ans_i $ 。对于每种店都开一个 multiset 即可维护前驱。
这样每一次加入/删除会需要区间修改前驱,代码难度大,考虑 $ (l_i + ans_i, INF) $ 中每种店上一次出现的位置不小于 $ l_i + ans_i $ 的另一种解释,即 $ (l_i + ans_i, INF) $ 每个位置中每种店每个位置上一次出现的位置最小值不小于 $ l_i + ans_i $ ,然后就可以单点修改了。用线段树维护前驱最小值。
询问可以二分答案,更优秀的做法是在线段树上二分。
1 |
|