Cod sursa(job #3348047)

Utilizator tonealexandruTone Alexandru tonealexandru Data 19 martie 2026 13:52:40
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>
#define int long long

using namespace std;

const int NMAX = 15005;
int aint[NMAX * 4];

void update(int nod, int st, int dr, int poz, int val)
{
    if(st == dr)
    {
        aint[nod] = val;
        return;
    }

    int mij = (st + dr) / 2;

    if(poz <= mij)
        update(nod * 2, st, mij, poz, val);
    else
        update(nod * 2 + 1, mij + 1, dr, poz, val);

    aint[nod] = aint[nod * 2] + aint[nod * 2 + 1];
}

int query(int nod, int qst, int qdr, int st, int dr)
{
    int sum = 0;

    if(qst <= st && dr <= qdr)
        return aint[nod];

    int mij = (st + dr) / 2;

    if(qst <= mij)
        sum += query(nod * 2, qst, qdr, st, mij);

    if(mij + 1 <= qdr)
        sum += query(nod * 2 + 1, qst, qdr, mij + 1, dr);

    return sum;
}

signed main()
{
    ifstream cin("datorii.in");
    ofstream cout("datorii.out");
    int n, m, a;
    cin>>n>>m;

    for(int i=1; i<=n; i++)
    {
        cin>>a;
        update(1, 1, n, i, a);
    }

    int type, b;
    for(int i=0; i<m; i++)
    {
        cin>>type>>a>>b;
        if(type == 0)
        {
            int cur_value = query(1, a, a, 1, n);
            //cout<<" ?"<<cur_value<<'\n';
            update(1, 1, n, a, cur_value - b);
        }
        else if(type == 1)
            cout<<query(1, a, b, 1, n)<<'\n';

    }


    return 0;
}