记录编号 445254 评测结果 EEEEEEEEEEEEEEE
题目名称 数列操作B 最终得分 0
用户昵称 Gravatarswttc 是否通过 未通过
代码语言 C++ 运行时间 1.239 s
提交时间 2017-09-05 17:16:14 内存使用 7.18 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<queue>
#define mid (l+r)/2
#define ls o*2
#define rs o*2+1

using namespace std;

long long n,m,sum[400000],a[100010],lazy[400000];

void buildt(long long l,long long r,long long o)
{
	if(l==r)
	{
		sum[o]=a[l];
		return;
	}//
	buildt(l,mid,ls);
	buildt(mid+1,r,rs);
	sum[o]=sum[ls]+sum[rs];
	return;
}

void pushdown(long long l,long long r,long long o)
{
	if(l==r) return;
	lazy[ls]+=lazy[o];
	lazy[rs]+=lazy[o];
	sum[ls]+=lazy[o]*(mid-l+1);
	sum[rs]+=lazy[o]*(r-mid);
	lazy[o]=0;
	return;
}

void add(long long l,long long r,long long o,long long ll,long long rr,long long x)
{
	
	if(l>=ll&&r<=rr)
	{
		lazy[o]+=x;
		sum[o]+=(r-l+1)*x;//cout<<lazy[o]<<" "<<o<<endl;
		return;
	}
	pushdown(l,r,o);
	if(mid>=ll)
	{
		add(l,mid,ls,ll,rr,x);
	}
	if(mid<rr)
	{
		add(mid+1,r,rs,ll,rr,x);
	}
	sum[o]=sum[ls]+sum[rs];
	return;
}

long long query(long long l,long long r,long long o,long long ll,long long rr)
{//cout<<lazy[o]<<" "<<o<<endl;
	long long t=0;
	if(l>=ll&&r<=rr)
	{
		return sum[o];
	}
	pushdown(l,r,o);
	if(mid>=ll)
	{
		t+=query(l,mid,ls,ll,rr);
	}
	if(mid<rr)
	{
		t+=query(mid+1,r,rs,ll,rr);
	}
	return t;
}

int main()
{
	//cout<<(sizeof(sum)+sizeof(a)+sizeof(lazy))/1024/1024;
	freopen("shuliec.in","r",stdin);
	freopen("shuliec.out","w",stdout);
	scanf("%lld",&n);
	for(long long i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]);
	}
	buildt(1,n,1);
	scanf("%lld",&m);
	for(long long i=1;i<=m;i++)
	{
		string s;
		cin>>s;
		if(s[0]=='A')
		{
			long long w,y,q;
			scanf("%lld%lld%lld",&w,&y,&q);
			add(1,n,1,w,y,q);
			//update(1,n,1,w,y);
		}
		else
		{
			long long y,q;
			scanf("%lld%lld",&y,&q);
			printf("%lld\n",query(1,n,1,y,q));
		}
	}
	return 0;
}