Cod sursa(job #3029949)

Utilizator stefanchpStefan Chiper stefanchp Data 17 martie 2023 12:08:49
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <bits/stdc++.h>
#define N 100000
using namespace std;

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

int n, m;
vector <int> a;
int sol[4 * N + 1];

void creare_arbore(int st, int dr, int nod)
{
    if(st != dr)
    {
        int mij = (st + dr) / 2, aux1, aux2;
        creare_arbore(st, mij, 2 * nod);
        creare_arbore(mij + 1, dr, 2 * nod + 1);
        sol[nod] = sol[2 * nod] + sol[2 * nod + 1];
    }
    else sol[nod] = a[st];
}

int answer(int x, int y, int st, int dr, int nod)
{
    if(x <= st && dr <= y)
        return sol[nod];
    else
    {
        int aux1, aux2, mij = (st + dr) / 2;
        if( x <= mij && mij + 1 <= y)
            return answer(x, mij, st, mij, 2 * nod) + answer(mij + 1, y, mij + 1, dr, 2 * nod + 1);
        else if( x >= mij + 1 )
            return answer(x, y, mij + 1, dr, 2 * nod + 1);
        else if( y <= mij )
            return answer(x, y, st, mij, 2 * nod);
    }
}

void update(int z, int v, int st, int dr, int nod)
{


}

void citire()
{
    bool op;
    int x, st, dr, z, v;
    fin >> n >> m;
    a.push_back(0);
    for(int  i = 1; i <= n; i++)
        fin >> x, a.push_back(x);
    creare_arbore(1, n, 1);
    /*
    for(int i = 0; i <= 3; i++, fout << '\n')
        for(int j = 1 << i; j < (1 << (i + 1)); j++)
            fout << sol[j] << ' ';*/

    for(int i = 1; i <= m; i++)
    {
        fin >> op;
        if(!op)
        {
            fin >> z >> v;
            update(z, v, 1, n, 1);
        }
        else
        {
            fin >> st >> dr;
            fout << answer(st, dr, 1, n, 1) << '\n';
        }
    }
    fin.close();
    fout.close();
}

int main()
{
    citire();
    return 0;
}