BZOJ 4499: 线性函数

4499: 线性函数

Time Limit: 20 Sec  Memory Limit: 256 MB
Submit: 177  Solved: 127
[Submit][Status][Discuss]

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(fr-1(...fl(x)))  mod  10^9+7 。

Input

第一行两个整数n, m (1 <= n, m <= 200,000)。
接下来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

HINT

1 <= n, m <= 200,000,0 <= k, b, x < 1000,000,007

Source

 
[Submit][Status][Discuss]

 

莫名其妙,线段树维护一下区间的函数和就好了,单点修改,区间查询,比GSS还水……

 

UPDATE 感觉这么水的题,再困还是可以写出来的,补代码……

 

 1 #include<cstdio>
 2 #define N 200005
 3 #define M 800005
 4 #define P 1000000007
 5 int n,m,ki[N],bi[N],k[M],b[M];
 6 void build(int t,int l,int r){
 7     if(l==r)k[t]=ki[l],b[t]=bi[l];
 8     else{
 9         int d=l+r>>1,x=t<<1,y=x|1;
10         build(x,l,d);
11         build(y,d+1,r);
12         k[t]=(1LL*k[x]*k[y])%P;
13         b[t]=(1LL*k[y]*b[x]%P+b[y])%P;
14     }
15 }
16 void build(int t,int l,int r,int p){
17     if(l==r)k[t]=ki[l],b[t]=bi[l];
18     else{
19         int d=l+r>>1,x=t<<1,y=x|1;
20         if(p<=d)build(x,l,d,p);
21         else build(y,d+1,r,p);
22         k[t]=(1LL*k[x]*k[y])%P;
23         b[t]=(1LL*k[y]*b[x]%P+b[y])%P;
24     }
25 }
26 int query(int t,int l,int r,int x,int y,int v){
27     if(l==x&&r==y)return (1LL*k[t]*v%P+b[t])%P;
28     int d=l+r>>1;
29     if(y<=d)return query(t<<1,l,d,x,y,v);
30     if(x>d)return query(t<<1|1,d+1,r,x,y,v);
31     return query(t<<1|1,d+1,r,d+1,y,query(t<<1,l,d,x,d,v));
32 }
33 main(){
34     scanf("%d%d",&n,&m);
35     for(int i=1;i<=n;++i)
36         scanf("%d%d",ki+i,bi+i);
37     build(1,1,n);
38     while(m--){
39         static int x,y,z;
40         static char s[10];
41         scanf("%s%d%d%d",s,&x,&y,&z);
42         if(s[0]=='M')ki[x]=y,bi[x]=z,build(1,1,n,x);
43         else printf("%d\n",query(1,1,n,x,y,z));
44     }
45 }

 

@Author: YouSiki

 

posted @ 2017-03-12 16:37  YouSiki  阅读(333)  评论(0编辑  收藏  举报