比赛 寒假集训4 评测结果 AAEEEEEEEE
题目名称 数据结构题 最终得分 20
用户昵称 小福鑫 运行时间 1.730 s
代码语言 C++ 内存使用 3.46 MiB
提交时间 2026-02-28 10:36:29
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
int tree[100001],n,m,op,a[1000001],l,r,x,p;
int qpow(int a,int b,int p){
	int ans=1;
	a%=p;
	while(b) {
		if(b&1)ans=(ans%p)*(a%p)%p;
		b/=2;
		a=(a%p)*(a%p)%p;
	}
	ans%=p;
	return ans;
}
int lowbit(int x){
    return x&(-x);
}
void add(int x, int k){
    while(x<=n){
        tree[x]+=k;
        x+=lowbit(x);
    }
}
int query(int x){
    int sum=0;
    while(x>0){
        sum+=tree[x];
        x-=lowbit(x);
    }
    return sum;
}
signed main(){
    freopen("sjjgt.in","r",stdin);
    freopen("sjjgt.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        add(i,a[i]-a[i-1]); 
    }
    for(int i=1;i<=m;i++){
        cin>>op;
        if(op==1){ 
            cin>>l>>r>>x;
            add(l,x);
            add(r+1,-x);
        }
        else{ 
            cin>>l>>r>>p;
            cout<<qpow(query(l),query(r),p)<<"\n";
        }
   }
}