0pts 求调
查看原帖
0pts 求调
918478
All_Wrong_Answer楼主2024/11/8 21:49

题目:P3373

代码:

#include <bits/stdc++.h>
using namespace std;
//#define int long long
//#define ln (d<<1)
//#define rn (d<<1|1)
//#define mid ((r+l)>>1)
//#define LL long long
long long x,y,z;
long long m[1000005];
struct node{
	long long l,r,sum;
	long long add;
	long long mul;
};
node tr[4000005];
void js(long long q,long long l,long long r){
	tr[q]={l,r,m[l]};
	if(l==r){
		return ;
	}
	long long mid=(l+r)/2;
	js(q*2,l,mid);
	js(q*2+1,mid+1,r);
	tr[q].sum=tr[q*2].sum+tr[q*2+1].sum;
}
/*
void intn(int d,int l,int r) {
	tree[d].l=l;
	tree[d].r=r;
	if(l==r) {
		tree[d].num=(LL)(a[l]);
		return;
	}
	intn(ln,l,mid);
	intn(rn,mid+1,r);
	tree[d].num=tree[ln].num+tree[rn].num;
	tree[d].num%=mod;
}
*/
void ddjf(long long q,long long n,long long k){
	if(tr[q].l==n&&tr[q].r==n) {
		tr[q].sum+=k;
		return ;
	}
	long long mid=(tr[q].l+tr[q].r)/2;
	if(n<=mid) ddjf(q*2,n,k);
	if(n>mid) ddjf(q*2+1,n,k);
	tr[q].sum=tr[q*2].sum+tr[q*2+1].sum;
}
void calc(node &f,int a,int b){
	f.sum=(f.sum*a+(f.r-f.l+1)*a)%z;
	f.mul=f.mul*a%z;
	f.add=(f.add*a+b)%z;
}
void qjgg(long long q,long long ml,long long mr,long long t,long long k){
	if(mr<tr[q].l||ml>tr[q].r) return ;
	if(ml<=tr[q].l&&tr[q].r<=mr){
		calc(tr[q],t,k);
		return ;
	}
	//long long u=tr[q].l+tr[q].r>>1;
	calc(tr[q*2],tr[q].mul,tr[q].add);
	calc(tr[q*2+1],tr[q].mul,tr[q].add);
	tr[q].mul=1;
	tr[q].add=0;
	qjgg(q*2,ml,mr,t,k);
	qjgg(q*2+1,ml,mr,t,k);
	tr[q].sum=(tr[q*2].sum+tr[q*2+1].sum)%z;
}
long long qjqh(long long q,long long ml,long long mr){
	//cout<<q<<" "<<tr[q].l<<" "<<tr[q].r<<" "<<tr[q].sum<<"\n";
	if(tr[q].l>=ml&&tr[q].r<=mr) return tr[q].sum;
	long long mid=(tr[q].l+tr[q].r)/2;
	calc(tr[q*2],tr[q].mul,tr[q].add);
	calc(tr[q*2+1],tr[q].mul,tr[q].add);
	tr[q].mul=1;
	tr[q].add=0;
	long long summ=0;
	if(/*tr[q].l<=ml*/ml<=mid/*&&tr[q].r>=mr*/){
		summ+= qjqh(q*2,ml,mr);
	}
	if(/*tr[q].l>=ml&&*/mr>mid/*tr[q].r>=mr*/){
		summ+= qjqh(q*2+1,ml,mr);
	}
	return summ;
}
signed main(){
	cin>>x>>y>>z;
	for(int i=1;i<=x;i++){
		cin>>m[i];
	}
	js(1,1,x);
	//for(int j=1;j<=x*4;j++){
	//            cout<<"        "<<tr[j].l<<" "<<tr[j].r<<" "<<tr[j].sum<<endl;
    //        }
	//for(int i=1;i<=x*4;i++){
	//	cout<<"     "<<tr[i].l<<" "<<tr[i].r<<" "<<tr[i].sum<<endl;
	//}
	for(long long i=1;i<=y;i++){
		long long a,b,c,d;
		cin>>a;
		if(a==3){
			cin>>b>>c;
			cout<<qjqh(1,b,c)<<endl;
				//for(int j=1;j<=x*4;j++){
	            //	cout<<"        "<<tr[j].l<<" "<<tr[j].r<<" "<<tr[j].sum<<endl;
	            //}
		}
		else{
		cin>>b>>c>>d;
			if(a==1){
				qjgg(1,b,c,d,0);
			}
			else{
				qjgg(1,b,c,1,d);
			}
		//	for(int j=1;j<=x*4;j++){
	    //        cout<<"        "<<tr[j].l<<" "<<tr[j].r<<" "<<tr[j].sum<<endl;
        //   }
		}
	}
	return 0;
}
2024/11/8 21:49
加载中...