又WA#3
查看原帖
又WA#3
138106
tgs9311楼主2021/4/17 15:50

cf的数据毒瘤,#3直接巨大数据没法调

求hack或指出哪里错了,谢谢~

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace FAST_IO
{
	template<typename T> void read(T &a)
	{
		a=0;
		int f=1;
		char c=getchar();
		while(!isdigit(c))
		{
			if(c=='-')
			{
				f=-1;
			}
			c=getchar();
		}
		while(isdigit(c))
		{
			a=a*10+c-'0';
			c=getchar();
		}
		a=a*f;
	}
	template <typename T> void write(T a)
	{
		if(a<0)
		{
			a=-a;
			putchar('-');
		}
		if(a>9)
		{
			write(a/10);
		}
		putchar(a%10+'0');
	}
	template <typename T> void writeln(T a)
	{
		write(a);
		puts("");
	}
}
const int maxn=2e5+999;
int belong[maxn],l[maxn],r[maxn],num,_size;
int n,a[maxn],add[maxn],m,maxt[maxn];
void build()
{
	for(int i=1;i<=n;i++)
	{
		FAST_IO::read(a[i]);
	}
	_size=sqrt(n);
	num=n/_size;
	if(n%_size)
	{
		num++;
	}
	for(int i=1;i<=num;i++)
	{
		l[i]=(i-1)*_size+1;
		r[i]=i*_size;
	}
	r[num]=n;
	for(int i=1;i<=n;i++)
	{
		belong[i]=i/_size;
		if(i%_size)
		{
			belong[i]++;
		}
		add[belong[i]]+=a[i];
		maxt[belong[i]]=max(maxt[belong[i]],a[i]);
	}
} 
void update(int ls,int rs,int mod)
{
	int x=belong[ls],y=belong[rs];
	if(x==y)
	{
		if(maxt[x]>=mod)
		{
			for(int i=ls;i<=rs;i++)
			{
				add[x]-=a[i];
				a[i]%=mod;
				add[x]+=a[i];
			}
			maxt[x]=0;
			for(int i=l[x];i<=r[x];i++)
			{
				maxt[x]=max(maxt[x],a[i]);	
			}
		}
	}
	else
	{
		if(maxt[x]>=mod)
		{
			for(int i=ls;i<=r[x];i++)
			{
				add[x]-=a[i];
				a[i]%=mod;
				add[x]+=a[i];
			}
			maxt[x]=0;
			for(int i=l[x];i<=r[x];i++)
			{
				maxt[x]=max(maxt[x],a[i]);	
			}
		}
		for(int i=x+1;i<=y-1;i++)
		{
			if(maxt[i]>=mod)
			{
				for(int j=l[i];j<=r[i];j++)
				{
					add[i]-=a[j];
					a[j]%=mod;
					add[i]+=a[j];
				}
				maxt[i]=0;
				for(int j=l[i];j<=r[i];i++)
				{
					maxt[i]=max(maxt[i],a[j]);	
				}
			}			
		}
		if(maxt[y]>=mod)
		{
			for(int i=l[y];i<=rs;i++)
			{
				add[y]-=a[i];
				a[i]%=mod;
				add[y]+=a[i];
			}
			maxt[y]=0;
			for(int i=l[y];i<=r[y];i++)
			{
				maxt[y]=max(maxt[y],a[i]);	
			}
		}
	}
}
int ask(int ls,int rs)
{
	int ans=0;
	int x=belong[ls],y=belong[rs];
	if(x==y)
	{
		for(int i=ls;i<=rs;i++)
		{
			ans+=a[i]; 
		}
	}
	else
	{
		for(int i=ls;i<=r[x];i++)
		{
			ans+=a[i];
		}
		for(int i=x+1;i<=y-1;i++)
		{
			ans+=add[i];	
		}
		for(int i=l[y];i<=rs;i++)
		{
			ans+=a[i];
		}
	}
	return ans;
}
void update1(int place,int c)
{
	int x=belong[place];
	a[place]=c;
	maxt[x]=add[x]=0;
	for(int i=l[x];i<=r[x];i++)
	{
		add[x]+=a[i];
		maxt[x]=max(maxt[x],a[i]);
	}
}
signed main()
{
	FAST_IO::read(n);
	FAST_IO::read(m);
	build();
	while(m--)
	{
		int c,a,b;
		FAST_IO::read(c);
		FAST_IO::read(a);
		FAST_IO::read(b);
		if(c==2)
		{
			int mo;
			FAST_IO::read(mo);
			update(a,b,mo);
		}
		else if(c==1)
		{
			FAST_IO::writeln(ask(a,b));
		}
		else
		{
			update1(a,b);
		}
	}
}

2021/4/17 15:50
加载中...