​洛谷 P3368 【模板】树状数组 2​​​
【区间修改+单点查询】

//树状数组:区间修改+单点查询 
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
const int mxn=500005;
int n,m;
ll a[mxn],c[mxn];
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline int lowbit(int x) {return x&-x;}
inline void add(ll x,ll y)
{
for(int i=x;i<=n;i+=lowbit(i))
c[i]+=y;
}
inline ll getsum(ll x)
{
ll sum=0;
for(int i=x;i;i-=lowbit(i))
sum+=c[i];
return sum;
}
int main()
{
ll i,j,t,u,v,x,y;
n=read(),m=read();
fo(i,1,n) a[i]=read();
while(m--)
{
t=read();
if(t==1)
{
u=read(),v=read(),x=read();
add(u,x),add(v+1,-x);
}
else
{
x=read();
printf("%lld\n",getsum(x)+a[x]);
}
}
return 0;
}

​洛谷 P3374 【模板】树状数组 1​​​
【单点修改+区间查询】

//树状数组:单点修改+区间查询 
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
const int mxn=500005;
int n,m;
ll a[mxn],c[mxn];
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline int lowbit(int x) {return x&-x;}
inline void add(ll x,ll y)
{
for(int i=x;i<=n;i+=lowbit(i))
c[i]+=y;
}
inline ll getsum(ll x)
{
ll sum=0;
for(int i=x;i;i-=lowbit(i))
sum+=c[i];
return sum;
}
int main()
{
ll i,j,t,u,v,x,y;
n=read(),m=read();
fo(i,1,n) x=read(),add(i,x);
while(m--)
{
t=read();
if(t==1)
{
x=read(),u=read();
add(x,u);
}
else
{
x=read();y=read();
printf("%lld\n",getsum(y)-getsum(x-1));
}
}
return 0;
}