Cod sursa(job #2754898)

Utilizator lalalaura_02Udroiu Laura-Ioana lalalaura_02 Data 26 mai 2021 17:45:07
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");

int stree[400002], s;

void update(int i, int st, int dr, int poz, int val)
{
    if (st == dr) {
        stree[i] += val;
        return;
    }

    int mij = (st + dr )/ 2;
    if (poz <= mij) // daca elementul cautat este mai mic, mergem in subarborele stang
        update (2*i, st, mij, poz, val);
    else //mergem in subarborele drept
        update (2*i+1, mij + 1, dr, poz, val);

    stree[i] = stree[2*i] + stree[2*i + 1] ; // calculam suma copiilor
}

int query(int i, int st, int dr, int x, int y)
{

    if (x <= st && y >= dr)
        return stree[i];


    int mij = (st + dr )/ 2;
    int suma1 = 0, suma2=0;

    if (x <= mij)
        suma1 = query(2*i, st, mij, x, y);
    if (y > mij)
        suma2 = query(2*i+1, mij + 1, dr, x, y);

    return suma1 + suma2;
}


int n, m, a, op, b;
int main()
{

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

    for (int i=1; i<=m; i++)
    {
        fin >> op >> a >> b;
        if (op==0)
        {
            update(1, 1, n, a, -b);
        }
        else
        {
            fout << query(1, 1, n, a, b) << '\n';
        }
    }
    return 0;
}