Cod sursa(job #3338865)

Utilizator bulatalexandrinaAlexandrina Bulat bulatalexandrina Data 5 februarie 2026 12:26:06
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#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;
}