Cod sursa(job #2902156)

Utilizator robert2211Barbu Robert-Gabriel robert2211 Data 15 mai 2022 19:07:53
Problema Datorii Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>

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

void atribuire(int i, int st, int dr, int poz, int val, int A[])
{
    int mij;
    if (st == dr)
    {
        A[i] = A[i]+val;
        return;
    }

    mij = (st+dr)/2;
    if (poz <= mij)
        atribuire(2*i, st, mij, poz, val, A);
    else
        atribuire(2*i+1, mij+1, dr, poz, val, A);
    A[i] = A[2*i]+A[2*i+1];
}

int sume(int i, int st, int dr, int x, int y, int A[])
{

    int mij = (st+dr)/2, suma1 = 0, suma2=0;
    if (x <= st && y >= dr)
        return A[i];
    if (x <= mij)
        suma1 = sume(2*i, st, mij, x, y, A);
    if (y > mij)
        suma2 = sume(2*i+1, mij + 1, dr, x, y, A);

    return suma1 + suma2;
}

int main()
{

    int A[300001], N, M, valori, i, cod, T, V, P, Q;
    f>>N>>M;
    for(i=1; i<=N; i++)
    {
        f>>valori;
        atribuire(1, 1, N, i, valori, A);
    }
    for(i=1; i<=M; i++)
    {
        f>>cod;
        if (cod == 0)
        {
            f>>T>>V;
            atribuire(1, 1, N, T, -V, A);
        }
        else
        {
            f>>P>>Q;
            g<<sume(1, 1, N, P, Q, A)<<'\n';
        }
    }
    return 0;
}