悬关求调
查看原帖
悬关求调
918478
All_Wrong_Answer楼主2024/11/13 20:50

rt,悬关

代码:

#include <bits/stdc++.h>
using namespace std;
int x,y,z;
struct node{
	int n,l,r,s;
	int ad;
	int ch;
}; 
node tre[4000005];
int m[1000005];
void js(long long q,long long l,long long r){
	tre[q].ad=0;
	tre[q].ch=1;
	tre[q].l=l;
	tre[q].r=r;
	tre[q].s=m[l];
	if(l==r){
		return ;
	}
	long long mid=(l+r)/2;
	js(q*2,l,mid);
	js(q*2+1,mid+1,r);
	tre[q].s=tre[q*2].s+tre[q*2+1].s;
}
/*
1 2 3 4 5 --- 15

*2

2 4 6 8 10 --- 30
*/
void cfd(int q){
	if(tre[q].ch!=1){
		tre[q*2].s*=tre[q].ch;
		tre[q*2+1].s*=tre[q].ch;
		tre[q*2].ch+=tre[q].ch;
		tre[q*2+1].ch+=tre[q].ch;
		tre[q].ch=1;
		tre[q*2].s%=z;
		tre[q*2+1].s%=z;
	}
	return ;
}
void jfd(int q){
	if(tre[q].ad!=0){
		tre[q*2].s+=tre[q].ad*(tre[q*2].r-tre[q*2].l+1),
		tre[q*2+1].s+=tre[q].ad*(tre[q*2+1].r-tre[q*2+1].l+1);
		tre[q*2].ad+=tre[q].ad;
		tre[q*2+1].ad+=tre[q].ad;
		tre[q].ad=0;
		tre[q*2].s%=z;
		tre[q*2+1].s%=z;
	}
	return ;
}
void qjcf(int q,int ml,int mr,int u){
    if(tre[q].r<ml) return ;
	if(tre[q].l>mr) return ;
	if(tre[q].l>=ml&&tre[q].r<=mr){
		tre[q].s*=u;
		tre[q].s%=z;
		tre[q].ch+=u;
		return ;
	}
	cfd(q);
	jfd(q);	
	if(tre[q].l<=ml) qjcf(q*2,ml,mr,u);
	if(tre[q].r>=mr) qjcf(q*2+1,ml,mr,u);
	tre[q].s=tre[q*2].s+tre[q*2+1].s;
}

void qjjf(int q,int ml,int mr,int u){
    if(tre[q].r<ml) return ;
	if(tre[q].l>mr) return ;
	//cout<<tre[q].l<<" "<<tre[q].r<<endl;
	if(tre[q].l>=ml&&tre[q].r<=mr){
		tre[q].s+=(tre[q].r-tre[q].l+1)*u;
		tre[q].s%=z;
		tre[q].ad+=u;
		return ;
	}
	cfd(q);
	jfd(q);	
	long long mid=tre[q].l+tre[q].r>>1;
	if(ml<=mid) qjjf(q*2,ml,mr,u);
	if(mr>mid) qjjf(q*2+1,ml,mr,u);
	tre[q].s=tre[q*2].s+tre[q*2+1].s;
}
long long qjqh(int q,int ml,int mr){
	if(tre[q].r<ml) return 0;
	if(tre[q].l>mr) return 0;
	//cout<<tre[q].l<<" "<<tre[q].r<<endl;
	cfd(q);
	jfd(q);	
	//tre[q].s=tre[q*2].s+tre[q*2+1].s;
	if(tre[q].l>=ml&&tre[q].r<=mr){
		return tre[q].s;
    }
    long long mid=(tre[q].l+tre[q].r)/2;
    int sum=0;
    if(ml<=mid) sum+=qjqh(q*2,ml,mr);
	if(mr>mid) sum+=qjqh(q*2+1,ml,mr);
	return sum;
}




int main(){
	cin>>x>>y>>z;
	for(int i=1;i<=x;i++){
		cin>>m[i];
	}
	js(1,1,x);
	for(int i=1;i<=y;i++){
		int a,b,c,d;
		cin>>a;
		if(a==1){
			cin>>b>>c>>d;
		    qjcf(1,b,c,d);
				//for(int i=1;i<=x*4;i++){
		        //    cout<<"     "<<tre[i].s<<" "<<tre[i].l<<" "<<tre[i].r<<endl;
	            //}	
		}
		if(a==2){
			cin>>b>>c>>d;
			qjjf(1,b,c,d);
				//for(int i=1;i<=x*4;i++){
		         //   cout<<" "<<tre[i].s<<" "<<tre[i].l<<" "<<tre[i].r<<endl;
	            //}
			
		}
		if(a==3){
			cin>>b>>c;
			
			cout<<qjqh(1,b,c)%z<<endl;
			//for(int i=1;i<=x*4;i++){
		    //        cout<<"                     "<<tre[i].s<<" "<<tre[i].l<<" "<<tre[i].r<<endl;
	        //   }
		}
	}
}

0pts

2024/11/13 20:50
加载中...