Cod sursa(job #2907808)

Utilizator Bogdy_PPrunescu Bogdan Bogdy_P Data 31 mai 2022 17:35:16
Problema Datorii Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb

#include <iostream>
#include <fstream>

using namespace std;

int n,m,op,a,b;
int arbore[400001];

std::ifstream f("datorii.in");
std::ofstream g("datorii.out");

int suma_int(int nod, int st, int dr, int inceput, int sfarsit)
{
    if(inceput > dr || sfarsit < st)
        return 0;
    if(inceput <= st && sfarsit >= dr)
        return arbore[nod];
    else
    {
        int mijloc_int = (st+dr) >> 1 ;
        return suma_int(nod << 1, st,mijloc_int,inceput,sfarsit) + suma_int((nod << 1)+1, mijloc_int+1, dr, inceput, sfarsit);
    }
}


void insert_val(int nod, int st, int dr, int poz, int val) {
    if(poz > dr || poz < st) return;
        if(st == poz && st == dr)
            {
            arbore[nod] += val;
            return;
            }
    int mijloc_int = (st+dr) >> 1;
    if (poz <= mijloc_int)
        insert_val(nod << 1, st, mijloc_int,poz,val);
    else
    {
        insert_val((nod << 1)+1, mijloc_int+1, dr, poz, val);
    }

    arbore[nod] = arbore[nod << 1] + arbore[(nod << 1) + 1];

}


int main()
{

ios::sync_with_stdio(false);
cin.tie(NULL);

    f >> n >> m;
    int x;
    for(int i = 1; i <= n; ++i)
    {
        f >> x;
        insert_val(1,1,n,i,x);
    }

    for( int i = 0; i < m; ++i) {
        f >> op >> a >> b;

        if(!op)
        {
            insert_val(1,1,n,a,-b);
        }
        else
        {
            g << suma_int(1,1,n,a,b) << '\n';
        }
    }


    return 0;
}