Pagini recente » Cod sursa (job #2401478) | Cod sursa (job #2173926) | Cod sursa (job #2456222) | Cod sursa (job #250929) | Cod sursa (job #2395805)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");
const int nmax = 1e5 + 5;
int n, q, a[5 * nmax], op, x, y, val, poz, start, finish, SUM, v[nmax];
void update (int nod, int st, int dr)
{
int mij;
if (st == dr)
{
a[nod] = val;
return;
}
mij = (st + dr) / 2;
if (poz <= mij) update(2 * nod, st, mij);
else update(2 * nod + 1, mij+1, dr);
a[nod] = a[2*nod] + a[2*nod+1];
}
int query (int nod, int st, int dr)
{
int mij, SUMA = 0, SUMB = 0;
if (start <= st && dr <= finish)
{
return a[nod];
}
mij = (st + dr) / 2;
if (start <= mij) SUMA = query(2*nod, st, mij);
if (mij < finish) SUMB = query(2*nod+1, mij+1, dr);
return SUMA + SUMB;
}
int main()
{
fin >> n >> q;
for (int i=1; i<=n; i++)
{
fin >> val;
v[i] = val;
poz = i;
update(1, 1, n);
}
while (q--)
{
fin >> op >> x >> y;
if (op == 0)
{
poz = x;
v[x] -= y;
val = v[x];
update(1, 1, n);
}
else
{
start = x;
finish = y;
SUM = query(1, 1, n);
fout << SUM << '\n';
}
}
return 0;
}