求卡常
查看原帖
求卡常
167999
dd_d楼主2021/5/22 09:36

RT 调不动了

//LYC_music yyds!
#include<bits/stdc++.h>
#define int long long
//#define N 1000001
using namespace std;
inline int read()
{
	int pos=1,num=0;
	char ch=getchar();
	while (!isdigit(ch))
	{
		if (ch=='-') pos=-1;
		ch=getchar();
	}
	while (isdigit(ch))
	{
		num=num*10+(int)(ch-'0');
		ch=getchar();
	}
	return pos*num;
}
inline void write(int x)
{
	if (x<0)
	{
		putchar('-');
		write(-x);
		return;
	}
	if (x>=10) write(x/10);
	putchar(x%10+'0');
}
inline void writesp(int x)
{
	write(x);
	putchar(' ');
}
inline void writeln(int x)
{
	write(x);
	putchar('\n');
}
const int N=200001;
int l,r,ans,L[N],R[N],pos[N],pre[501][501],suf[501][501],sum[N],a[N],s[501][501],n,len,cnt,m,mod=1e9+7,Q,x,y,z;
inline void build()
{
	len=sqrt(n);
	while (++cnt)
	{
		L[cnt]=R[cnt-1]+1; R[cnt]=min(len*cnt,n);
		for (register int i=L[cnt];i<=R[cnt];i++)
		{
			pos[i]=cnt;
			sum[cnt]+=a[i];
		}
		if (R[cnt]==n) break;
	}
}
signed main()
{
	n=read(); m=read();
	for (register int i=1;i<=n;i++)
		a[i]=read();
	build();
	for (register int i=1;i<=m;i++)
	{
		Q=read();
		if (Q==1)
		{
			x=read(); y=read(); z=read();
			if (x>len)
			{
				for (register int i=y;i<=n;i+=x)
				{
					a[i]+=z;
					sum[pos[i]]+=z;
				}
				continue;
			}
    		for (register int i=y;i<=x;i++) 
			{
        		pre[x][i]+=z;
        		pre[x][i]%=mod;
    		}
   			for (register int i=1;i<=y;i++) 
			{
        		suf[x][i]+=z;
        		suf[x][i]%=mod;
    		}
		}
		else
		{
			x=read(); y=read();
			l=pos[x],r=pos[y],ans=0;
			if (l==r)
			{
				for (register int i=x;i<=y;i++)
					(ans+=a[i])%=mod;
			}
			else
			{
				for (register int i=x;i<=R[l];i++)
					(ans+=a[i])%=mod;
				for (register int i=l+1;i<=r-1;i++)
					(ans+=sum[i])%=mod;
				for (register int i=L[r];i<=y;i++)
					(ans+=a[i])%=mod;
			}
			for (int i=1;i<=len;i++)
			{
				register int p=(x-1)/i+1;
				register int q=(y-1)/i+1;
				if (p!=q) ans=(ans+1LL*(q-p-1)*pre[i][i]+suf[i][x-(p-1)*i]+pre[i][y-(q-1)*i])%mod;
					else ans=(ans+pre[i][y-(q-1)*i]-pre[i][x-1-(q-1)*i])%mod;
			}
			writeln((ans+mod)%mod);
		}
	}
}
2021/5/22 09:36
加载中...