单点更新代码:
void add(int a , int b)
{
while(a <= n)
{
tree[a] += b;
a += lowbit(a);
}
}
区间求和代码:
int sum(int x)
{
int ans = 0;
while(x != 0)
{
ans += tree[x];
x -= lowbit(x);
}
return ans;
}
主代码:
#include<bits/stdc++.h>
using namespace std;
int n , m;
int tree[500001];
int lowbit(int k)
{
return k & -k;
}
void add(int a , int b)
{
while(a <= n)
{
tree[a] += b;
a += lowbit(a);
}
}
int sum(int x)
{
int ans = 0;
while(x != 0)
{
ans += tree[x];
x -= lowbit(x);
}
return ans;
}
int main(void)
{
int x ,y = 0 , z ,flag;
int num;
cin>>n>>m;
for(int i = 1 ; i <= n ; i ++)
{
cin>>x;
add(i,x-y);
y = x;
}
for(int i = 1 ; i <= m ; i ++)
{
cin>>flag;
if(flag == 1)
{
cin>>x>>y>>z;
add(x,z);
add(y+1,-z);
}
if(flag == 2)
{
cin>>x;
cout<<sum(x)<<endl;
}
}
return 0;
}
如有不懂参考如下:
https://blog.csdn.net/qq_33982232/article/details/81273634
https://blog.csdn.net/Small_Orange_glory/article/details/81290634