萌新求助
查看原帖
萌新求助
300283
Yaixy楼主2020/6/23 22:26

这题蒟蒻调了半天没调出来,因为是xxs所以太弱请谅解一下。

有大佬可以帮我看一下吗,还是nz跪谢(假的,谢谢大佬。

代码:

#include<bits/stdc++.h>
using namespace std;
int i,n,m,x,y,z,t,id,ans,f[10005][10005],a[100005],q[100005];
int lowbit(int x)
{
	return x&(-x);
} 
int s(int k,int id)
{
	int ans=0;
	for(;id;id-=lowbit(id)) ans+=f[k][id];
	return ans;
}
int sum(int id)
{
	return (id+1)*s(0,id)-s(i,id);
}
void change(int k,int id,int v)
{
	for(;id=0;id+=lowbit(id)) f[k][id]+=v;
}


int main()
{
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	 {
	 	scanf("%d",&a[i]);
	 	q[i]=q[i-1]+a[i];
	 }
	for(i=1;i<=m;i++)
	 {
	 	scanf("%d",t);
	 	if(t==1)
	 	 {
	 	 	scanf("%d%d%d",&x,&y,&z);
	 	 	change(0,x,z);
	 	 	change(1,x,x*z);
	 	 	change(0,y+1,-z);
	 	 	change(1,y+1,(y+1)*(-z));
		 }
		else
		 {
		 	scanf("%d%d",&x,&y);
		 	ans=sum(y)-sum(x-1);
		 	printf("%d\n",ans+q[y]-q[x-1]);
		 }
	 }
	return 0;
}
2020/6/23 22:26
加载中...