吐了
查看原帖
吐了
289056
北射天狼楼主2022/1/26 11:33

题目链接

请忽略奇怪的变量名

#include <bits/stdc++.h>
using namespace std;
#define AK_IOI 1010000
typedef long long ll;
ll c,m,h;
ll Naoh[AK_IOI];
ll zzp[AK_IOI];
ll chen_zhe[AK_IOI];//维护加法
ll xmyzwls[AK_IOI];//维护乘法 
void pushup(ll rt)
{
	zzp[rt]=zzp[rt<<1]+zzp[rt<<1|1];
}
void pushdown(ll l,ll r,ll rt,ll h){
	ll mid=(l+r)>>1;
	zzp[rt<<1]=(ll)(zzp[rt<<1]*xmyzwls[rt]+(chen_zhe[rt]*(mid-l+1))%h)%h;
	zzp[rt<<1|1]=(ll)(zzp[rt<<1|1]*xmyzwls[rt]+(chen_zhe[rt]*(r-mid))%h)%h;
	
	xmyzwls[rt<<1]=(ll)(xmyzwls[rt<<1]*xmyzwls[rt])%h;
	xmyzwls[rt<<1|1]=(ll)(xmyzwls[rt<<1|1]*xmyzwls[rt])%h;
	
	chen_zhe[rt<<1]=(ll)(chen_zhe[rt<<1]*xmyzwls[rt]+chen_zhe[rt])%h;
	chen_zhe[rt<<1|1]=(ll)(chen_zhe[rt<<1|1]*xmyzwls[rt]+chen_zhe[rt])%h;
	
	xmyzwls[rt]=1;chen_zhe[rt]=0;
}
/*
    t[p*2].sum=(ll)(t[p].mu*t[p*2].sum+((t[p*2].r-t[p*2].l+1)*t[p].add)%mod)%mod;
    t[p*2+1].sum=(ll)(t[p].mu*t[p*2+1].sum+(t[p].add*(t[p*2+1].r-t[p*2+1].l+1))%mod)%mod;//add已经乘过mu啦
	
    t[p*2].mu=(ll)(t[p*2].mu*t[p].mu)%mod;
    t[p*2+1].mu=(ll)(t[p*2+1].mu*t[p].mu)%mod;

	t[p*2].add=(ll)(t[p*2].add*t[p].mu+t[p].add)%mod;
    t[p*2+1].add=(ll)(t[p*2+1].add*t[p].mu+t[p].add)%mod;
    
    t[p].mu=1,t[p].add=0;
*/
void build(ll l,ll r,ll rt){
	if (l==r){
		chen_zhe[rt]=0;
		xmyzwls[rt]=1;
		zzp[rt]=Naoh[l];
		return ;
	}
	ll mid=(l+r)>>1;
	build(l,mid,rt*2);
	build(mid+1,r,rt*2+1);
	pushup(rt);
}
void mul(ll x,ll y,ll l,ll r,ll p,ll rt,ll h){
	if (l>y||r<x)    return ;
	if (x<=l&&r<=y){
		chen_zhe[rt]=(chen_zhe[rt]*p)%h;
		xmyzwls[rt]=(xmyzwls[rt]*p)%h;
		zzp[rt]=(zzp[rt]*p)%h;
		return ;
	} 
	pushdown(l,r,rt,h);
	ll mid=(l+r)>>1;
	mul(x,y,l,mid,p,rt*2,h);
	mul(x,y,mid+1,r,p,rt*2+1,h);
	pushup(rt); 
}
void add(ll x,ll y,ll l,ll r,ll p,ll rt,ll h){
	if (l>y||r<x)    return ;
	if (x<=l&&r<=y){
		chen_zhe[rt]=(chen_zhe[rt]+p)%h;
		zzp[rt]=(zzp[rt]+(r-l+1)*p);
		return ;
	} 
	pushdown(l,r,rt,h);
	ll mid=(l+r)>>1;
	add(x,y,l,mid,p,rt*2,h);
	add(x,y,mid+1,r,p,rt*2+1,h);
	pushup(rt); 
}
ll que(ll x,ll y,ll l,ll r,ll rt,ll h){
	if (l>=x&&r<=y){
		return zzp[rt];
	}
	if (x>r||y<l)    return 0;
	pushdown(l,r,rt,h);
	ll mid=(l+r)>>1;
	return (que(x,y,l,mid,rt*2,h)+que(x,y,mid+1,r,rt*2+1,h))%h; 
}
int main()
{
	cin>>c>>m>>h;
	for (ll i=1;i<=c;i++)    cin>>Naoh[i];
	build(1,c,1);
	for (ll j=1;j<=m;j++){
		ll n,o,i,p;
		cin>>n;
		if (n==1){
			cin>>o>>i>>p;
			mul(o,i,1,c,p,1,h);
		}	 
		if (n==2){
			cin>>o>>i>>p;
			add(o,i,1,c,p,1,h);
		}
		if (n==3){
			cin>>o>>i;
			cout<<que(o,i,1,c,1,h)%h<<endl;
		}
	} 
	return 0;
}

题目链接

请忽略奇怪的变量名

样例没过,全部WA掉。

求查错qwq

2022/1/26 11:33
加载中...