比赛 数列操作练习题 评测结果 AAAAAAAAA
题目名称 数列操作B 最终得分 100
用户昵称 pα.Princesavs 运行时间 0.087 s
代码语言 C++ 内存使用 0.67 MiB
提交时间 2017-03-19 08:24:06
显示代码纯文本
#include<cstdio>
using namespace std;
int n,m;
int C[100001];
char s[4];
int Lowbit(int x)
{
	return x & -x;
}
void Add(int i,int x)
{
	while(i<=n)
	{
		C[i]+=x;
		i+=Lowbit(i);
	}
}
void aDD(int l,int r,int add)
{
	int p=l;
	while(p<=n)
	{
		C[p]+=add;
		p+=Lowbit(p);
	}
	p=r+1;
	while(p<=n)
	{
		C[p]-=add;
		p+=Lowbit(p);
	}
}
int PR(int k)
{
	int Sum=0;
	while(k)
	{
		Sum+=C[k];
		k-=Lowbit(k);
	}
	return Sum;
}
int main()
{
	freopen("shulieb.in","r",stdin);
	freopen("shulieb.out","w",stdout);
	scanf("%d",&n);
	int x=0,y=0,z;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&y);
		z=y-x;
		x=y;
		Add(i,z);
	}
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		int a,b,kk;
		scanf("%s",s);
		if(s[0]=='Q')
		{
			scanf("%d",&a);
			printf("%d\n",PR(a));
			continue;
		}
		scanf("%d%d%d",&a,&b,&kk);
		aDD(a,b,kk);
	}
	return 0;
}