题解:AT_abc368_g [ABC368G] Add and Multiply Queries
这道题挺有启发性的。
首先我们需要注意到一件事情,题目上说保证答案不超过 \(10^{18}\),而在题目中说对 \(b\) 数组是连乘,因为即使是 \(2\),只需要累乘 \(60\) 次就可以超过 \(10^{18}\),所以我们断然 \(b\) 数组中比 \(1\) 大的元素不会很多。
于是想到一种暴力,用一个 set
存储 \(b\) 中所有比 \(1\) 大的位置,在查询操作中每次二分找到 \(b\) 在当前左端点右边的第一个比 \(1\) 大的位置,特判掉边界以后,在这段区间中选择 \(a\) 数组一定更优,对于这个位置,只需要比较一下是选 \(a\) 还是选 \(b\) 即可。
对 \(a\) 区间加法的时候用树状数组什么的搞一下就可以了。