Cod sursa(job #2454454)

Utilizator StanCatalinStanCatalin StanCatalin Data 8 septembrie 2019 15:52:40
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("datorii.in");
ofstream out("datorii.out");

const int dim = 15005;

int arb[4*dim],a[dim];
int n,m;

void update(int nod,int st,int dr,int index,int value)
{
    if (st == dr && st == index)
    {
        arb[nod] = value;
        return ;
    }
    int mid = (st+dr)/2;
    if (index <= mid)
    {
        update(2*nod , st , mid,index,value);
    }
    else
    {
        update(2*nod+1,mid+1,dr,index , value);
    }
    arb[nod] = arb[2*nod] + arb[2*nod+1];
}

int query(int nod,int st,int dr,int a,int b)
{
    if (b < st || a > dr)
    {
        return 0;
    }
    if (a <= st && dr <= b)
    {
        return arb[nod];
    }
    int mid = (st+dr)/2;
    return query(2*nod,st,mid,a,b) + query(2*nod+1,mid+1,dr,a,b);
}

int main()
{
    in >> n >> m;
    for (int i=1; i<=n; i++)
    {
        in >> a[i];
        update(1,1,n,i,a[i]);
    }
    int op,x,y;
    for (int i=1; i<=m; i++)
    {
        in >> op >> x >> y;
        if (op == 0)
        {
            a[x] -= y;
            update(1,1,n,x,a[x]);
        }
        else
        {
            out << query(1,1,n,x,y) << "\n";
        }
    }
    return 0;
}