#include<iostream>
using namespace std;
int a[500001],b[500001],xx[500001],y[500001],c[500001],m,n,k[500001],kk[500001];
int lowbit(int x)
{
return x&-x;
}
void adds(int x)
{
int i=x;
while(i<=n)
{
b[i]+=a[x];
i+=lowbit(i);
}
}
void addss(int x,int k)
{
while(x<=n)
{
b[x]+=k;
x+=lowbit(x);
}
}
int query(int x)
{
int s=0;
while(x>0)
{
s+=b[x];
x-=lowbit(x);
}
return s;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
// adds(i);
}
for(int i=1;i<=m;i++)
{
cin>>c[i];
if(c[i]==1)
{
cin>>xx[i]>>y[i]>>k[i];
kk[i]=-k[i];
addss(y[i]+1,kk[i]);
addss(xx[i],k[i]);
}
else
{
cin>>xx[i];
cout<<query(xx[i])+a[xx[i]]<<endl;
}
}
return 0;
}
树状数组
最新推荐文章于 2024-07-02 22:40:02 发布