记录编号 465186 评测结果 AAAAAAAAAAAAAAA
题目名称 数列操作A 最终得分 100
用户昵称 Gravatar小字、小瓶子 是否通过 通过
代码语言 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;
}