记录编号 |
501081 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
数列操作C |
最终得分 |
100 |
用户昵称 |
_Itachi |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.430 s |
提交时间 |
2018-07-19 10:24:23 |
内存使用 |
4.87 MiB |
显示代码纯文本
//
// shuliec.cpp
//
//
// Created by apple on 2018/7/19.
//
#include <stdio.h>
using namespace std;
#define LL long long
const int maxn=100005<<1;
int cnt=0,n,m,ls[maxn],rs[maxn],s,t;LL lz[maxn],v[maxn],qx;
void Up(int rt){
v[rt]=v[ls[rt]]+v[rs[rt]];
}
int Set(int l,int r){
int rt=++cnt;
if(l==r){
scanf("%lld",&v[rt]);
return rt;
}
int mid=(l+r)>>1;
ls[rt]=Set(l,mid),rs[rt]=Set(mid+1,r);
Up(rt);return rt;
}
void Down(int rt,int l,int r,int mid){
if(!lz[rt])return;
lz[ls[rt]]+=lz[rt],lz[rs[rt]]+=lz[rt];
v[ls[rt]]+=(mid-l+1)*lz[rt],v[rs[rt]]+=(r-mid)*lz[rt];
lz[rt]=0;
}
void Add(int rt,int l,int r){
if(s<=l&&r<=t){
v[rt]+=(r-l+1)*qx,lz[rt]+=qx;
return;
}
int mid=(l+r)>>1;Down(rt,l,r,mid);
if(s<=mid)Add(ls[rt],l,mid);
if(t> mid)Add(rs[rt],mid+1,r);
Up(rt);
}
LL Sum(int rt,int l,int r){
if(s<=l&&r<=t)return v[rt];
int mid=(l+r)>>1;Down(rt,l,r,mid);
LL res=0;
if(s<=mid)res+=Sum(ls[rt],l,mid);
if(t> mid)res+=Sum(rs[rt],mid+1,r);
return res;
}
int main(){
freopen("shuliec.in","r",stdin);freopen("shuliec.out","w",stdout);
scanf("%d",&n),Set(1,n);
scanf("%d",&m);char S[5];
while(m--){
scanf("%s",S);
if(S[0]=='A')scanf("%d%d%lld",&s,&t,&qx),Add(1,1,n);
else scanf("%d%d",&s,&t),printf("%lld\n",Sum(1,1,n));
}
}