#P7131. 「RdOI R1」变换(turn)

「RdOI R1」变换(turn)

题目描述

有 nn 个变换,其中第 ii 个有两个属性值 pip_i 和 qiq_i,当这个变换作用到 xx 时,xx 将会变成 fi(x),fi(x)f_i(x),f_i(x) 的定义为:

$$f_i(x)=\left\lfloor\dfrac{x}{p_i}\right\rfloor+q_i$$

给定 mm 条操作,操作分两种:

修改操作可以修改某个变换的属性值;

查询操作将会给定 xx 以及两个序号 ss 和 tt,你需要计算并输出:

ft(ft−1(⋯fs+1(fs(x))))f_{t}(f_{t-1}(\cdots f_{s+1}(f_{s}(x))))

输入格式

第一行:两个正整数表示 nn 和 mm。

第二行:nn 个整数,表示 p1,p2,⋯ ,pnp_1,p_2,\cdots,p_n。

第三行:nn 个整数,表示 q1,q2,⋯ ,qnq_1,q_2,\cdots,q_n。

接下来 mm 行,每行表示一个操作:

修改 操作以字母 m 开头,后接三个参数 i,p′,q′i,p',q',表示将第 ii 个变换的属性值修改成 p′,q′p',q'。保证任何时候属性都满足 1≤pi≤1000,0≤qi≤10001\leq p_i\leq 1000, 0\leq q_i\leq 1000。

查询 操作以字母 q 开头,后接三个参数 x,s,tx,s,t,意义见题面,保证 s≤t,0≤x≤106s\leq t, 0\leq x\leq 10^6。

输出格式

对每个询问操作,输出一个整数,表示所求的答案,以换行分隔。

3 3
2 1 2
1 1 1
q 100 1 3
m 2 2 0
q 100 1 3
27
13
见附件中的 turn-big-sample1.in
见附件中的 turn-big-sample1.out

提示

【数据范围】

  • 对于 20%20\% 的数据,1≤n≤103,1≤m≤1041 \le n \le 10^3,1 \le m \le 10^4。
  • 对于另外 30%30\% 的数据,1≤n≤104,1≤m≤1051 \le n \le 10^4,1 \le m \le 10^5。
  • 对于 100%100\% 的数据,1≤n≤105,1≤m≤2×1051 \le n \le 10^5,1 \le m \le 2 \times 10^5。

【文件读入读出】(模拟,提交代码时不需使用)

  • 文件名:turn.cpp
  • 读入文件名:turn.in
  • 读出文件名:turn.out