#include<iostream>
#include<cstring>
#define maxn 50005
#define mod 1000000007
#define ll long long
#define qc std::ios::sync_with_stdio(false),std::cin.tie(0)
using namespace std;
struct Tree{
int l,r,mid;
ll msum;
};
Tree t[maxn<<2];
ll V[maxn];
void pushup(int k){
t[k].msum=((t[k<<1].msum)%mod*(t[k<<1|1].msum)%mod)%mod;
}
void build(int k,int l,int r){
t[k].l=l,t[k].r=r,t[k].mid=(l+r)>>1;
if(t[k].l==t[k].r){
t[k].msum=V[r]%mod;
return;
}
build(k<<1,t[k].l,t[k].mid);
build(k<<1|1,t[k].mid+1,t[k].r);
pushup(k);
}
ll query(int k,int l,int r){
// if(t[k].r<l||t[k].l>r){
// return 1;
// }
if(t[k].l>=l&&t[k].r<=r){
return t[k].msum;
}
ll ans=1;
if(l<=t[k].mid)ans*=query(k<<1,l,r)%mod;
if(r>t[k].mid)ans*=query(k<<1|1,l,r)%mod;
return ans%mod;
}
void update(int k,int index,int value){
if(t[k].r<index||t[k].l>index){
return ;
}
if(t[k].l==t[k].r){
t[k].msum=value%mod;
return;
}
if(index<=t[k].mid)update(k<<1,index,value);
else update(k<<1|1,index,value);
pushup(k);
}
int n,q,T;
int a,b,c;
int main(){
//qc;
scanf("%d",&T);
while (T--)
{
memset(t,0,sizeof(t));
memset(V,0,sizeof(V));
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&V[i]);
build(1,1,n);
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d%d%d",&a,&b,&c);
if(a){
update(1,b,c);
}
else
{
printf("%lld\n",query(1,b,c)%mod);
}
}
}
}
Multiply game (HDU3074)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...