Cod sursa(job #1509632)

Utilizator gedicaAlpaca Gedit gedica Data 24 octombrie 2015 09:56:14
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>

using namespace std;

const int N2MAX= 16384;

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

int arb[N2MAX*2];

int query( int nod, int lq, int rq, int ln, int rn )
{
    int ans1, ans2;

    if( ln >= lq && rn <= rq )
    {
        return arb[nod];
    }
    if( ln > rq || rn < lq )
    {
        return 0;
    }
    ans1= query( nod*2, lq, rq, ln, (rn+ln)/2 );
    ans2= query( nod*2+1, lq, rq, (rn+ln)/2+1, rn );

    return ans1+ans2;
}

int main(  )
{
    int N, M, N2= 1;
    in >> N >> M;

    while( N2<N )
    {
        N2*=2;
    }

    for( int i= N2; i<=N2+N-1; ++i )
    {
        in >> arb[i];
    }
    for( int i= N2-1; i>=1; --i )
    {
        arb[i]= arb[i*2]+arb[i*2+1];
    }

    for( int q= 1; q<=M; ++q )
    {
        int a, b, c;
        in >> a >> b >> c;
        if( a==0 )
        {
            int aux= (N2-1+b)/2;
            arb[N2-1+b]-=c;
            while( aux>=1 )
            {
                arb[aux]= arb[aux*2]+arb[aux*2+1];
                aux/=2;
            }
        }
        else
        {
            out << query( 1, b, c, 1, N2 ) << '\n';
        }
    }

    return 0;
}