Pagini recente » Profil InfoFabiana | Cod sursa (job #714848) | Cod sursa (job #2846460) | Cod sursa (job #1523306) | Cod sursa (job #2433652)
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, l;
int arb[40000];
void read()
{
scanf("%d", &n);
scanf("%d", &m);
l = 1;
while(l < n)
l <<= 1;
for(int i = l; i < l + n; ++i)
{
scanf("%d", &arb[i]);
}
}
void initArb()
{
for(int i = l - 1, j = i << 1; i; --i, j -= 2)
arb[i] = arb[j] + arb[j + 1];
}
void printSum(int x, int y)
{
int sum = 0;
while(x != y)
{
if(x & 1)
sum -= arb[x - 1];
if(!(y & 1))
sum -= arb[y + 1];
x >>= 1;
y >>= 1;
}
sum += arb[x];
printf("%d\n", sum);
}
void solve()
{
--l;
for(int i = 0; i < m; ++i)
{
int op, x, y;
scanf("%d", &op);
scanf("%d", &x);
scanf("%d", &y);
if(op == 0)
{
for(int r = l + x; r; r >>= 1)
arb[r] -= y;
}
if(op == 1)
{
printSum(l + x, l + y);
}
}
}
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
read();
initArb();
solve();
return 0;
}