记录编号 |
465186 |
评测结果 |
AAAAAAAAAAAAAAA |
题目名称 |
数列操作A |
最终得分 |
100 |
用户昵称 |
小字、小瓶子 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.662 s |
提交时间 |
2017-10-26 20:08:35 |
内存使用 |
1.84 MiB |
显示代码纯文本
//树状数组
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,np[100005],c[100005];
int lowbit(int x)
{
return x&-x;
}
void sum(int l,int r)
{
long long ans=0;
while(r>0)
{
ans+=c[r];
r-=lowbit(r);
}
l--;
while(l>0)
{
ans-=c[l];
l-=lowbit(l);
}
printf("%lld",ans);
}
void add(int k,int d)
{
while(k<=n)
{
c[k]+=d;
k+=lowbit(k);
}
}
int main()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
char in[5];
int l,r;
cin>>n;
for(int i=1;i<=n;i++)
scanf("%lld",&np[i]);
for(int i=1;i<=n;i++)
{
int x=lowbit(i);
for(int j=i-x+1;j<=i;j++)
c[i]+=np[j];
}
int m;
cin>>m;
for(int i=0;i<m;i++)
{
scanf("%s%d%d",&in,&l,&r);
if(in[0]=='S')
sum(l,r);
if(in[0]=='A')
add(l,r);
}
return 0;
}