社区讨论
线段二求调,没找出来是哪里的问题23333
P3373【模板】线段树 2参与者 3已保存回复 14
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 14 条
- 当前快照
- 1 份
- 快照标识符
- @lo7ix0ph
- 此快照首次捕获于
- 2023/10/27 02:34 2 年前
- 此快照最后确认于
- 2023/10/27 02:34 2 年前
CPP
//<Tree>
#include<iostream>
using namespace std;
unsigned long long a[500001],p;
struct node{
unsigned long long l,r,mid;
unsigned long long sum,lan,mul;
}t[9999999];
inline void pushup(long long p){
t[p].sum=(t[p*2].sum+t[p*2+1].sum)%p;
}
inline void build(long long p,long long l,long long r){
t[p].l=l,t[p].r=r,t[p].mid=(l+r)/2;
if(l==r)t[p].sum=a[l];
else{
build(p*2,l,t[p].mid);
build(p*2+1,t[p].mid+1,r);
pushup(p);
}
}
inline void add(long long p,long long x){
t[p].sum+=((t[p].r-t[p].l+1)*x)%p;
t[p].lan+=x%p;
}
inline void plus_add(long long p,long long x){
t[p].sum*=(t[p].sum*x)%p;
t[p].lan*=x%p;
t[p].mul*=x%p;
}
inline void pushdown(long long p){
if(t[p].lan==0)return;
add(p*2,t[p].lan%p);
add(p*2+1,t[p].lan%p);
t[p].lan=0;
}
inline void plus_pushdown(long long p){
if(t[p].mul==0)return;
plus_add(p*2,t[p].mul%p);
plus_add(p*2+1,t[p].mul%p);
t[p].mul=0;
}
inline void add(long long p,long long l,int r,long long x){
if(t[p].l>=l&&t[p].r<=r)add(p,x);
else{
pushdown(p);
if(t[p].mid>=l)add(p*2,l,r,x);
if(t[p].mid<r)add(p*2+1,l,r,x);
pushup(p);
}
}
inline void plus_add(long long p,long long l,int r,long long x){
if(t[p].l>=l&&t[p].r<=r)plus_add(p,x);
else{
plus_pushdown(p);
if(t[p].mid>=l)plus_add(p*2,l,r,x);
if(t[p].mid<r)plus_add(p*2+1,l,r,x);
pushup(p);
}
}
inline long long sum(long long p,long long l,long long r){
if(t[p].l>=l&&t[p].r<=r)return t[p].sum;
else{
pushdown(p),plus_pushdown(p);
long long ans=0;
if(t[p].mid>=l) ans+=sum(p*2,l,r);
if(t[p].mid<r) ans+=sum(p*2+1,l,r);
pushup(p);
return ans;
}
}
signed main(){
long long n,m;
cin>>n>>m>>p;
for(int i=1;i<=n;++i) cin>>a[i];
build(1,1,n);
while(m--){
long long op;
cin>>op;
if(op==1){
int l,r,k;
cin>>l>>r>>k;
plus_add(1,l,r,k);
}
if(op==2){
int l,r,k;
cin>>l>>r>>k;
add(1,l,r,k);
}
if(op==3){
int l,r;
cin>>l>>r;
cout<<sum(1,l,r)<<endl;
}
}
return 0;
}
感谢大佬
回复
共 14 条回复,欢迎继续交流。
正在加载回复...