[ABC368G] Add and Multiply Queries 讲解
[ABC368G] Add and Multiply Queries
题目考察:set(STL),树状数组。
题目简述:
给你两个序列
- 将
a_{pos} 改为x 。 - 将
b_{pos} 改为x 。 - 设
f_i(x) 为\max(x+a_i,x\times b_i) ,给你区间[l,r] ,求ans=f_r(f_{r-1}(\dots(f_{l+1}(f_l(0))))) 。
数据范围:
-
1\le n,q\le 10^5 -
\forall i\in[1,n],1\le a_i,b_i\le 10^9 - 在
1,2 操作中,1\le pos\le n - 在
1,2 操作中,1\le x\le 10^9 - 在
3 操作中,1\le l\le r\le n -
在
3 操作中,1\le ans\le 10^{18} 乍一看这道题既不满足前缀和的性质,也不满足 ST 表的性质,非常不可做。
实际上我们发现在
那么我们将加的数扔进树状数组里,将大于一的乘的数的下标扔进 set 里,查询的时候暴力去找第一个非
时间复杂度为
代码