比赛 |
2024暑假C班集训E |
评测结果 |
WWWWWWWWWWWWWWWWWWWW |
题目名称 |
相逢是问候 |
最终得分 |
0 |
用户昵称 |
健康铀 |
运行时间 |
1.785 s |
代码语言 |
C++ |
内存使用 |
4.17 MiB |
提交时间 |
2024-07-14 10:28:37 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,c,p,a[1000010],s[4000010],v[4000010],res;
long long abc(long long a1,long long b,long long p1){
long long ans=1%p1;
for(;b;b>>=1){
if(b&1)ans=(long long)a1*ans%p;
a1=(long long)a1*a1%p;
}
return ans;
}
void js(long long k,long long l,long long r){
if(l==r){
s[k]=a[l];
return;
}
js(k*2,l,(r+l)/2);
js(k*2+1,(r+l)/2+1,r);
s[k]=s[k*2]+s[k*2+1];
}
void xg(long long k,long long x,long long l,long long r,long long d){
if(r<x||l>x){
return;
}
if(l==r){
s[k]=abc(c,s[k],p);
return;
}
xg(k*2,x,l,(r+l)/2,d);
xg(k*2+1,x,(r+l)/2+1,r,d);
s[k]=s[k*2]+s[k*2+1];
}
void ask(long long k,long long x,long long y,long long l,long long r){
if(l>y||r<x){
return;
}
if(x<=l&&r<=y){
res+=s[k]%p;
return;
}
ask(k*2,x,y,l,l+(r-l)/2);
ask(k*2+1,x,y,l+(r-l)/2+1,r);
}
int main(){
freopen("verbinden.in","r",stdin);
freopen("verbinden.out","w",stdout);
cin>>n>>m>>p>>c;
for(long long i=1;i<=n;i++)
cin>>a[i];
js(1,1,n);
while(m--){;
long long x,l,r;
cin>>x>>l>>r;
if(x==0){
xg(1,l,1,n,r);
}
else{
res=0;
ask(1,l,r,1,n);
cout<<res<<endl;
}
}
return 0;
}