| 比赛 |
寒假集训4 |
评测结果 |
WWEEEEEEEE |
| 题目名称 |
数据结构题 |
最终得分 |
0 |
| 用户昵称 |
exil |
运行时间 |
2.015 s |
| 代码语言 |
C++ |
内存使用 |
3.68 MiB |
| 提交时间 |
2026-02-28 11:37:38 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
int xu[5005];
struct node{
int l;
int r;
int sum;
int tag;
};
node tp[500005];
void jianshu(int k,int l,int r){
tp[k]=(node){l,r,0,0};
if(l==r){
tp[k].sum=xu[l];
return;
}
int mid=(l+r)/2;
jianshu(k<<1,l,mid);
jianshu(k<<1|1,mid+1,r);
tp[k].sum=tp[k<<1].sum+tp[k<<1|1].sum;
}
void pushdown(int x){
if(tp[x].tag==0)return;
tp[x<<1].sum+=(tp[x<<1].r-tp[x<<1].l+1)*tp[x].tag;
tp[x<<1].tag+=tp[x].tag;
tp[x<<1|1].sum+=(tp[x<<1|1].r-tp[x<<1|1].l+1)*tp[x].tag;
tp[x<<1|1].tag+=tp[x].tag;
tp[x].tag=0;
}
void add(int k,int l,int r,int a){
if(tp[k].l>r || tp[k].r<l)return;
if(tp[k].l>=l && tp[k].r<=r){
tp[k].sum+=(tp[k].r-tp[k].l+1)*a;
tp[k].tag+=a;
pushdown(k);
return;
}
pushdown(k);
add(k<<1,l,r,a);
add(k<<1|1,l,r,a);
pushdown(k);
tp[k].sum=tp[k<<1].sum+tp[k<<1|1].sum;
}
int cha(int k,int l,int r){
pushdown(k);
if(tp[k].l>r || tp[k].r<l)return 0;
if(tp[k].l>=l && tp[k].r<=r){
return tp[k].sum;
}
return cha(k<<1,l,r)+cha(k<<1|1,l,r);
}
signed main(){
freopen("sjjgt.in","r",stdin);
freopen("sjjgt.out","w",stdout);
int n,m;
cin>>n>>m;
for(int i = 1;i<=n;i++)cin>>xu[i];
jianshu(1,1,n);
for(int j = 1;j<=m;j++){
int op;
cin>>op;
if(op==1){
int l,r,x;
cin>>l>>r>>x;
add(1,l,r,x);
}
else{
int l,r,p;
cin>>l>>r>>p;
int a=cha(1,l,l),b=cha(1,r,r);
int c=a;
int ans=1;
int t=b;
while(b){
if(b%2==1)ans*=c;
ans%=p;
b=(b>>1);
c*=c;
c%=p;
}
cout<<ans<<endl;
}
}
return 0;
}