记录编号 |
534325 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
数列操作A |
最终得分 |
100 |
用户昵称 |
李宴彬 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
4.177 s |
提交时间 |
2019-07-02 17:00:44 |
内存使用 |
20.15 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int a[100010];
struct node
{
int lc,rc;
long long sum;
}f[400010];
int n,m;
void build(int now,int lc,int rc)
{
f[now].lc=lc;
f[now].rc=rc;
f[now].sum=0;
if (f[now].lc==f[now].rc) {
return ;
}
int mid=(lc+rc)/2;
build(now*2,lc,mid);
build(now*2+1,mid+1,rc);
}
void change(int now,int k,int vl)
{
f[now].sum+=vl;
if (f[now].lc==f[now].rc)
{
return ;
}
int mid=(f[now].lc+f[now].rc)/2;
if (k<=mid) change(now*2,k,vl);
if (k>mid) change(now*2+1,k,vl);
}
long long getsum(int now,int x,int y)
{
if (f[now].lc==x&&f[now].rc==y) return f[now].sum;
int mid=(f[now].lc+f[now].rc)/2;
if (y<=mid) return getsum(now*2,x,y);
if (x>mid) return getsum(now*2+1,x,y);
return getsum(now*2,x,mid)+getsum(now*2+1,mid+1,y);
}
int main()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
cin>>n; build(1,1,n);
for (int i=1;i<=n;i++)
{
cin>>a[i];
change(1,i,a[i]);
}
int q;
cin>>q;
for (int i=1;i<=q;i++)
{
string s;
int x,y;
cin>>s>>x>>y;
if (s[0]=='S') cout<<getsum(1,x,y)<<endl;
else change(1,x,y) ;
}
return 0;
}