[线段树] [BZOJ4499] 线性函数

来源:互联网 发布:游戏同步器软件 编辑:程序博客网 时间:2024/06/04 18:44

题目描述 Description

小C最近在学习线性函数,线性函数可以表示为:f(x)=kx+b。现在小C面前有n个线性函数fi(x)=kix+bi ,他对这n个线性函数执行m次操作,每次可以:
1.M i K B 代表把第i个线性函数改为:fi(x)=kx+b
2.Q l r x 返回fr(fr1(...fl(x)))mod109+7

输入 Input

第一行两个整数n,m (1n,m2×105)。
接下来n行,每行两个整数ki, bi
接下来m行,每行的格式为M i K B或者Q l r x。

输出 Output

对于每个Q操作,输出一行答案。

样例输入 Sample Input

5 5
4 2
3 6
5 7
2 6
7 5
Q 1 5 1
Q 3 3 2
M 3 10 6
Q 1 4 3
Q 3 4 4

样例输出 Sample Output

1825
17
978
98

限制 Limits

1n,m2×1050k,b,x<109+7
Time Limit : 1s (并不知道多少组输入,猜的) & Memory Limit : 256MB

观察线性函数,设第一个函数为fl(x)=klx+bl,第二个为fr(x)=krx+br,那么按照题目要求合并的话,应把左边合并到右边,即fnew(x)=kr(klx+bl)+br=krklx+krbl+br为合并后的线性函数。
所以可以用线段树完成这些操作,需要单点修改和区间查询。
取模操作是不用管的,没有除法不用求逆元。
Code

0 0
原创粉丝点击