#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define re register
#define inl inline
#define LL long long
const int MAXN=5e5+5;
LL a[MAXN],adds[4*MAXN];
LL n,m,ans;
inl void change(LL num,LL l,LL r,LL x,LL y,LL v)
{
if(y<l||x>r) return;
if(l>=x&&y>=r)
{
adds[num]+=v;
return;
}
LL mid=(l+r)>>1;
change(num*2,l,mid,x,y,v);
change(num*2+1,mid+1,r,x,y,v);
}
inl LL work1(LL num,LL l,LL r,LL x)
{
if(l==r&&l==x) return adds[num];
LL mid=(l+r)>>1,tmp;
if(x<=mid) tmp=work1(num*2,l,mid,x);
else tmp=work1(num*2+1,mid+1,r,x);
return tmp+adds[num];
}
int main()
{
LL ty,x,y,u;
scanf("%lld%lld",&n,&m);
for(re LL i=1;i<=n;i++)
scanf("%lld",&a[i]);
while(m--)
{
scanf("%lld",&ty);
if(ty==1)
{
scanf("%lld%lld%lld",&x,&y,&u);
change(1,1,n,x,y,u);
}
else
{
scanf("%lld",&x);
ans=work1(1,1,n,x)+a[x];
printf("%lld\n",ans);
}
}
return 0;
}```
模板-----------线段树的区间修改,单点查询
最新推荐文章于 2023-11-10 14:27:54 发布