Cod sursa(job #1724945)

Utilizator radoneNeacsu Radu-Stefan radone Data 4 iulie 2016 16:46:20
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <fstream>

using namespace std;

#define maxn  15100

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

int arb[3*maxn], n, m, val, poz, zi, suma, suma_int, a;

void up( int nod, int stanga, int dreapta )
{
    if( stanga == dreapta )
    {
        arb[ nod ] += val;
    }
    else
    {
        int mij = ( stanga + dreapta ) / 2;
        if( poz <= mij )
        {
            up( 2 * nod, stanga, mij );
        }
        else
        {
            up( 2 * nod + 1, mij + 1, dreapta );
        }
        arb[ nod ] = arb[ 2 * nod ] + arb[ 2 * nod + 1 ];
    }
}


void que( int nod, int stanga, int dreapta )
{
    if( zi <= stanga && dreapta <= suma )
    {
        suma_int += arb[nod];
    }
    else
    {
        int mij = ( stanga + dreapta ) / 2;
        if( zi <= mij ) que( 2 * nod, stanga, mij );
        if( suma > mij ) que( 2 * nod + 1, mij + 1, dreapta );
    }
}

int main()
{
    f >> n >> m;
    for( int i = 1; i <= n ; i ++ )
    {
        f >> val;
        poz = i;
        up( 1, 1, n);
    }
    for( int i = 1; i <= m ; i ++ )
    {
        f >> a >> zi >> suma;

        if ( a == 0 )
        {
            poz = zi;
            val = -suma;
            up( 1, 1, n );
        }
        else
        {
            suma_int = 0;
            que( 1, 1, n );
            g << suma_int << '\n';
        }
    }
    return 0;
}