- admin's blog
【区间更新+单点查询】树状数组
- @ 2024-1-6 19:19:52
【区间更新+单点查询】树状数组
与单点修改、区间查询的树状数组的区别就是,这个树状数组建立的是差分数组,所以要得到单点的值的话,就是前x的差分和
Code
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&-x
const int N=5e5+12;
int a[N],n,m;
void add(int x,int v)
{
while(x<=n)
{
a[x]+=v;
x+=lowbit(x);
}
}
int getsum(int x)
{
int ans=0;
while(x)
{
ans+=a[x];
x-=lowbit(x);
}
return ans;
}
int main(){
cin>>n>>m;
int p,x,y,k;
for(int i=1;i<=n;i++)
{
cin>>x;
add(i,x);
add(i+1,-x);
}
while(m--)
{
cin>>p;
if( p==1 )
{
cin>>x>>y>>k;
add(x,k);
add(y+1,-k);
}
else{
cin>>x;
cout<<getsum(x)<<endl;
}
}
}