问题
区间更新 单点查询
解决
用差分数组来处理
注意: getsum(i) 就已经是当前点的值了
CODE:
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
typedef long long ll;
ll a[N],c[N];
ll n,m;
ll lowbit(ll x)
{
return x&(-x);
}
void updata(ll i,ll k)
{
while(i<=n)
{
c[i]+=k;
i+=lowbit(i);
}
}
ll getsum(ll i)
{
ll res = 0;
while(i>0)
{
res+=c[i];
i-=lowbit(i);
}
return res;
}
void solve()
{
cin>>n>>m;
for(ll i = 1; i<=n ; i++)
{
scanf("%lld",&a[i]);
updata(i,a[i]-a[i-1]);
}
for(ll i =1; i<=m; i++)
{
ll op;
scanf("%lld",&op);
if(op == 1)
{
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
updata(x,k);
updata(y+1,-k);
}
else
{
ll x;
scanf("%lld",&x);
printf("%lld\n",getsum(x));
}
}
}
int main()
{
solve();
return 0;
}