Cod sursa(job #2011914)

Utilizator ioanadarcCristina Arc ioanadarc Data 17 august 2017 15:25:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#define Nmax 15005
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int arb[4*Nmax], ans, n, m, x, qu, a, b;
void upd(int nod, int l, int r, int poz, int val,int scad)
{
    int middle = (l + r) / 2;

    if(l == r)
    {
        arb[nod] += val - scad;
        return;
    }
    if(poz <= middle)
        upd(2*nod , l , middle, poz, val,scad);
    else
        upd(2*nod + 1, middle + 1, r, poz, val,scad);
    arb[nod] = arb[2*nod] + arb[2*nod + 1];
}
void q(int nod, int l ,int r,int L, int R)
{
    int middle = (l + r) / 2;
    if(L <= l && r <= R)
    {
        ans += arb[nod];
        return;
    }
    if(l > R || r < L)
    {
        return;
    }
    q(2*nod, l, middle, L, R);
    q(2*nod + 1, middle + 1, r, L , R);
}
int main()
{
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        fin >> x;
        upd(1, 1, n, i, x, 0);
    }
    for(int i = 1; i <= m; i++)
    {
        fin >> qu >> a >> b;//valoare zi
        if(qu == 0)upd(1, 1, n, a, 0, b);
        else
        {
            ans = 0;
            q(1, 1, n, a, b);
            fout << ans <<'\n';
        }
    }
    return 0;
}