题目描述
思路:
这道题用差分树状数组就可以解决
c o d e code code
#include<iostream>
#include<cstdio>
using namespace std;
long long n, m, a[1010010];
long long c[1010101];
long long lowbit(long long x)
{
return x&-x;
}
void add(long long x, long long y)
{
for(; x<=n; x+=lowbit(x))
c[x]+=y;
}
long long query(long long x)
{
long long ans=0;
for(; x; x-=lowbit(x))
ans+=c[x];
return ans;
}
int main()
{
scanf("%lld%lld", &n, &m);
for(long long i=1; i<=n; i++)
{
scanf("%lld", &a[i]);
add(i, a[i]-a[i-1]);
}
while(m--)
{
long long k, x, y, z;
scanf("%lld%lld", &k, &x);
if(k==1)
{
scanf("%lld%lld", &y, &z);
add(x, z);
add(y+1, -z);
}
else
printf("%lld\n", query(x));
}
return 0;
}