题解: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\) 区间加法的时候用树状数组什么的搞一下就可以了。

AC记录

posted @ 2024-08-25 16:12  Redamancy_Lydic  阅读(19)  评论(0编辑  收藏  举报