比赛 数列操作练习题 评测结果 AAAAAAAAAAAAAAA
题目名称 数列操作A 最终得分 100
用户昵称 pα.Princesavs 运行时间 1.923 s
代码语言 C++ 内存使用 7.06 MiB
提交时间 2017-03-19 08:21:44
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int sum[1000000],n;
 
int lowbit(int x)
{
	return x&-x;
}
 
int query(int x)
{
	int ans=0;
	while (x>0)
	{
		ans+=sum[x];
		x-=lowbit(x);
	}
	return ans;
}
 
void change(int x,int data)
{
	while (x<=n)
	{
		sum[x]=sum[x]+data;
		x+=lowbit(x);
	}
}
 
int main()
{
	freopen("shulie.in","r",stdin);
	freopen("shulie.out","w",stdout);
	int m,x,y,pre[800000];
	cin>>n;
	memset(pre,0,sizeof(pre));
	for (int i=1;i<=n;++i)
	{
		scanf("%d",&x);
		pre[i]=pre[i-1]+x;
	}
	for (int i=1;i<=n;++i)
	 sum[i]=pre[i]-pre[i-lowbit(i)];
	cin>>m;
	string bz1="SUM",bz2="ADD",s;	
	for (int i=1;i<=m;++i)
	{
		cin>>s;
		scanf("%d%d",&x,&y);
		if(s==bz1)
		 cout<<query(y)-query(x-1);
		else if (s==bz2)
		 change(x,y);
	}
	return 0;
}