Pagini recente » Cod sursa (job #2432392) | Cod sursa (job #2497514) | Cod sursa (job #367640) | Istoria paginii runda/hlo-2023-cls1112-tema0 | Cod sursa (job #114567)
Cod sursa(job #114567)
#include<stdio.h>
int n, ptr, i, x, p, st, dr, suma, nr, val, v[16000], op, poz;
struct sgtree{
int v, st, dr;
};
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;
cstr(st, x, 2*poz);
cstr(x+1, dr, 2*poz+1);
}
}
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{
if (q[2*pz].st)
qr(2*pz);
if (q[2*pz+1].st)
qr(2*pz+1);
}
}
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 = p / 2;
}
}
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 = p / 2;
}
}
else{
scanf("%d%d", &st, &dr);
suma = 0;
qr(1);
printf("%d\n", suma);
}
}
return 0;
}