Pagini recente » Cod sursa (job #517029) | Cod sursa (job #1290824) | Monitorul de evaluare | Cod sursa (job #3329003) | Cod sursa (job #3338865)
#include <bits/stdc++.h>
using namespace std;
long long A[15001];
long long arb[60001];
void constr(int st, int dr, int nod) {
if (st == dr) {
arb[nod] = A[st];
return; }
int mij = (st + dr) / 2;
constr(st, mij, 2 * nod);
constr(mij + 1, dr, 2 * nod + 1);
arb[nod] = arb[2 * nod] + arb[2 * nod + 1]; }
long long inter(int st, int dr, int qs, int qd, int nod) {
if (qd < st || qs > dr)
return 0;
if (qs <= st && dr <= qd)
return arb[nod];
int mij = (st + dr) / 2;
return inter(st, mij, qs, qd, 2 * nod) +
inter(mij + 1, dr, qs, qd, 2 * nod + 1); }
int main()
{
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int N, M;
cin >> N >> M;
for (int i = 1; i <= N; i++)
cin >> A[i];
constr(1, N, 1);
while (M--) {
int tip, x, y;
cin >> tip >> x >> y;
if (tip == 0) {
A[x] -= y;
constr(1, N, 1);
} else {
cout << inter(1, N, x, y, 1) << '\n';
}
}
return 0;
}