求卡常
查看原帖
求卡常
206763
PtrZ楼主2021/8/6 10:21
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
	long long x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
long long n,m;
long long a[2000200],c[2000200];
long long lowbit(long long x) { return x&(-x);}
void add(long long x,long long v){
	for( ;x<=n;x+=lowbit(x)) c[x]+=v;
}
long long sum(long long x){
	long long s=0;
	for(;x>0;x-=lowbit(x)) s+=c[x];
	return s;
}
signed main() {
	n=read(),m=read();
	for(register long long i=1;i<=n;i++) a[i]=read(),add(i,a[i]);
	while(m--){
		long long op=read();
		if(op==1){
			long long x=read(),y=read(),z=read();
			for(register long long i=y;i<=n;i+=x) add(i,z);
		}else{
			long long l=read(),r=read();
			printf("%lld\n",(sum(r)-sum(l-1))%1000000007);
		}
	}
	return 0;
}

80分,最后两点T了

2021/8/6 10:21
加载中...