Cod sursa(job #2090514)

Utilizator ReeeBontea Mihai Reee Data 18 decembrie 2017 12:14:24
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>

using namespace std;

int arb[90000];

inline void Add_Debt( int Node , int Low , int High , int Day , int Val )
{
    if ( Low == High )
        arb[Node] += Val;
    else
    {
        arb[Node] += Val;
        int Mid = ( Low + High ) / 2;
        if ( Day <= Mid )
            Add_Debt( 2 * Node , Low , Mid , Day , Val );
        else
            Add_Debt( 2 * Node + 1 , Mid + 1 , High , Day , Val );
    }
}

inline int Query( int Node , int Low , int High , int Day1 , int Day2 )
{
    if ( Day1 <= Low && High <= Day2 )
        return arb[Node];
    if ( High < Day1 || Day2 < Low )
        return 0;
    int Mid = ( Low + High ) / 2;
    return Query( 2 * Node , Low , Mid , Day1 , Day2 ) + Query( 2 * Node + 1 , Mid + 1 , High , Day1 , Day2 );
}

void Read()
{
    ifstream fin("datorii.in");
    ofstream fout("datorii.out");
    int N , M , aux , cer , a1 , b1;
    fin >> N >> M;
    for ( int i = 1 ; i <= N ; ++i )
    {
        fin >> aux;
        if ( aux )
            Add_Debt( 1 , 1 , N , i , aux );
    }
    for ( int i = 1 ; i <= M ; ++i )
    {
        fin >> cer >> a1 >> b1;
        if ( !cer )
            Add_Debt( 1 , 1 , N , a1 , b1 * -1 );
        else
            fout << Query( 1 , 1 , N , a1 , b1 ) << '\n';
    }
    fin.close();
    fout.close();
}


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