Pagini recente » Cod sursa (job #323730) | Cod sursa (job #483739) | Cod sursa (job #1788963) | Cod sursa (job #364942) | Cod sursa (job #114439)
Cod sursa(job #114439)
#include<stdio.h>
int n, ptr, i, x, p, st, dr, suma, nr, val, v[16000], op, poz;
struct sgtree{
int v, dc1, dc2, st, dr, p;
};
sgtree q[50000];
void cstr(int st, int dr, int poz){
int x;
q[poz].st = st;
q[poz].dr = dr;
if (st == dr)
v[st] = poz;
else{
x = (st+dr) / 2;
nr ++;
q[poz].dc1 = nr;
q[nr].p = poz;
cstr(st, x, nr);
nr ++;
q[poz].dc2 = nr;
q[nr].p = poz;
cstr(x+1, dr, nr);
}
}
void qr(int pz){
if (q[pz].dr < st || q[pz].st > dr)
return ;
if (st <= q[pz].st && q[pz].dr <= dr)
suma += q[pz].v;
else{
qr(q[pz].dc1);
qr(q[pz].dc2);
}
}
int main()
{
freopen("datorii.in", "rt", stdin);
freopen("datorii.out", "wt", stdout);
scanf("%d%d", &n, &ptr);
nr = 1;
cstr(1, n, 1);
for (i=1; i<=n; i++){
scanf("%d", &x);
p = v[i];
while (p > 0){
q[p].v += x;
p = q[p].p;
}
}
for (i=1; i<=ptr; i++){
scanf("%d", &op);
if (!op){
scanf("%d%d", &poz, &val);
p = v[poz];
while (p > 0){
q[p].v -= val;
p = q[p].p;
}
}
else{
scanf("%d%d", &st, &dr);
suma = 0;
//qr(1);
printf("%d\n", suma);
}
}
return 0;
}