蒟蒻求调分块,全 WA
查看原帖
蒟蒻求调分块,全 WA
232460
xiaoqian02楼主2023/1/12 16:49

rt,最近在学习分块,用分块写的,部分参考第三篇题解

#include<bits/stdc++.h>
#define MOD 571373 
using namespace std;
void IOS()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	return;
}
int n,m,p,sqn,x,y,z,cnt;
int bg[325],ed[325],sm[325],ml[325],pl[325];
int c[100005];
void print()
{
	cout<<"c:"<<endl;
	for(int i=1;i<=n;i++) cout<<c[i]<<" ";
	cout<<endl;
	cout<<" bgn   end   sum   mul   pls"<<endl;
	for(int i=1;i<=cnt;i++)
		cout<<setw(5)<<bg[i]<<" "<<setw(5)<<ed[i]<<" "<<setw(5)<<sm[i]<<" "<<setw(5)<<ml[i]<<" "<<setw(5)<<pl[i]<<endl;
	return;
}
void rst(int kkk)
{
	for(int i=bg[kkk];i<=ed[kkk];i++)
		c[i]=(c[i]*ml[kkk]+pl[kkk])%MOD;
	ml[kkk]=1,pl[kkk]=0;
	return;
}
int main()
{
	IOS();
	cin>>n>>m>>p;
	sqn=sqrt(n);
	for(int i=1;i<=sqn;i++)
	{
		bg[i]=(i-1)*sqn+1;
		ed[i]=i*sqn;
		ml[i]=1;
	}
	if(sqn*sqn<n)
	{
		bg[sqn+1]=sqn*sqn+1;
		ed[sqn+1]=n;
		ml[sqn+1]=1;
	}
	cnt=1;
	for(int i=1;i<=n;i++)
	{
		cin>>c[i];
		if(i>ed[cnt]) cnt++;
		//bl[i]=cnt;
		sm[cnt]+=c[i];
	}
	while(m--)
	{
		cin>>p>>x>>y;
		int kkk=ceil(1.0*x/sqn),cz=ceil(1.0*y/sqn);
		if(p==1)
		{
			cin>>z;
			rst(kkk);
			for(int i=x;i<=min(y,ed[kkk]);i++)
			{
				sm[kkk]=(sm[kkk]+(z-1)*c[i])%MOD;
				c[i]=(c[i]*z)%MOD;
			}
			if(kkk!=cz)
				for(int i=bg[cz];i<=y;i++)
				{
					sm[cz]=(sm[cz]+(z-1)*c[i])%MOD;
					c[i]=(c[i]*z)%MOD;
				}
			for(int i=kkk+1;i<=cz-1;i++)
			{
				ml[i]=ml[i]*z%MOD;
				pl[i]=pl[i]*z%MOD;
			}
		}
		else if(p==2)
		{
			cin>>z;
			for(int i=x;i<=min(ed[kkk],y);i++)
				c[i]=(c[i]+z)%MOD;
			sm[kkk]=(sm[kkk]+z*(min(ed[kkk],y)-x+1))%MOD;
			if(kkk!=cz)
			{
				for(int i=bg[cz];i<=y;i++) c[i]=(c[i]+z)%MOD;
				sm[cz]=(sm[cz]+z*(y-bg[cz]+1))%MOD;
			}
			for(int i=kkk+1;i<=cz-1;i++) pl[i]=(pl[i]+z)%MOD;
		}
		else
		{
			int nm=0;
			for(int i=x;i<=min(ed[kkk],y);i++)
				nm=(nm+c[i]*ml[kkk]+pl[kkk])%MOD;
			if(kkk!=cz)
				for(int i=bg[cz];i<=y;i++)
					nm=(nm+c[i]*ml[cz]+pl[cz])%MOD;
			for(int i=kkk+1;i<cz;i++)
				nm=(nm+sm[i]*ml[i]+(ed[i]-bg[i]+1)*pl[i])%MOD;
			cout<<nm<<endl;
		}
		//print();
	}
	return 0;
}
2023/1/12 16:49
加载中...