比赛 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;
}