记录编号 |
228675 |
评测结果 |
AAAAAAAAA |
题目名称 |
数列操作B |
最终得分 |
100 |
用户昵称 |
Hzoi_Go灬Fire |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.222 s |
提交时间 |
2016-02-19 14:33:40 |
内存使用 |
1.43 MiB |
显示代码纯文本
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const long long maxn=100009;
long long n,a[maxn]={0},c[maxn]={0};
void Init();
void Update(long long,long long);
long long Lowbit(long long);
long long Get_max(long long);
int main(){
freopen("shulieb.in","r",stdin);
freopen("shulieb.out","w",stdout);
Init();
return 0;
}
void Init(){
long long m;
scanf("%lld",&n);
for(long long i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
scanf("%lld",&m);
for(long long i=1;i<=m;i++){
char s[10];
long long x;
long long l,r,y;
scanf("%s",s);
if(s[0]=='Q')
{
cin>>x;
printf("%lld\n",a[x]+Get_max(x));
}
if(s[0]=='A')
{
scanf("%lld%lld%lld",&l,&r,&y);
Update(l,y);
Update(r+1,-y);
}
}
}
long long Lowbit(long long x)
{
return x&-x;
}
void Update(long long x,long long y)
{
for(long long i=x;i<=n;i+=Lowbit(i))
{
c[i]+=y;
}
}
long long Get_max(long long x)
{
long long tot=0;
for(long long i=x;i>0;i-=Lowbit(i))
{
tot+=c[i];
}
return tot;
}