题解:
该题利用树状数组的结构特性,即可进行区间更改,单点查询寻
AC代码:
#include<bits/stdc++.h>
using namespace std;
//树状数组维护区间,单点查询
#define maxn 1000005
int a[maxn],c[maxn];
int n,m;
int lowbit(int x)
{
return x&(-x);
}
void update(int i,int k)//在i位置,添加k
{
while(i<=n)
{
c[i]+=k;
//printf("%d\n",i);
i+=lowbit(i);
}
}
int getpoint(int i)//单点查询
{
int res=0;
while(i>0)
{
res+=c[i];
//printf("%d\n",i);
i-=lowbit(i);
}
return res;
}
int main()
{
//int n;
char s[maxn];
scanf("%d %d",&n,&m);
while(m--)
{
scanf("%s",s);
if(s[0]=='A')
{
int l,r,k;
scanf("%d %d %d",&l,&r,&k);
update(l,k);
update(r+1,-k);
}
else
{
int x;
scanf("%d",&x);
printf("%d\n",getpoint(x));
}
}
}