#include <stdio.h>
#include <stdlib.h>
struct interval{
int left, right, val;
};
void create(interval *arb,int *v, int poz, int st, int dr)
{
if (st == dr)
{
arb[poz].val = v[st];
arb[poz].left = st;
arb[poz].right = dr;
return;
}
create(arb, v, poz * 2, st, (st + dr) / 2);
create(arb, v, poz * 2 + 1, (st + dr) / 2 + 1, dr);
arb[poz].left = st;
arb[poz].right = dr;
arb[poz].val = arb[poz * 2].val + arb[poz * 2 + 1].val;
}
void actualizare(interval*arb,int poz, int a, int b,int s)
{
if (a <= arb[poz].left && b >= arb[poz].right)
arb[poz].val -= s;
else
{
int mij = (arb[poz].left + arb[poz].right) / 2;
if (a <= mij)
actualizare(arb, 2 * poz, a, b, s);
if (b > mij)
actualizare(arb, 2 * poz + 1, a, b, s);
arb[poz].val = arb[poz * 2].val + arb[poz * 2 + 1].val;
}
}
int afla(interval*arb, int poz, int a, int b)
{
if (a == arb[poz].left && b == arb[poz].right)
return arb[poz].val;
else
{
int sl = 0, sr = 0, mij = (arb[poz].left + arb[poz].right) / 2 ;
if (a <= mij)
sl = afla(arb, 2 * poz, a, mij);
if (b>=mij)
sr = afla(arb, 2 * poz + 1, mij+1, b);
return sl + sr;
}
}
int main()
{
int i, n, m, s, cod,p,q,t;
FILE *f = fopen("datorii.in", "r"), *g = fopen("datorii.out", "w");
fscanf(f, "%d%d", &n, &m);
int *v = (int*)malloc(sizeof(int)*n);
for (i = 0; i < n; i++)
{
fscanf(f, "%d", &v[i]);
}
interval *arb = (interval*)malloc(sizeof(interval)*2*n);
create(arb, v, 1, 0, n - 1);
for (i = 0; i < m; i++)
{
fscanf(f, "%d", &cod);
if (cod)
{
fscanf(f, "%d%d", &p, &q);
fprintf(g, "%d\n", afla(arb,1,p-1,q-1));
}
else
{
fscanf(f, "%d%d", &t, &s);
actualizare(arb, 1, t-1, t-1, s);
}
}
}