Cod sursa(job #1512919)

Utilizator gedicaAlpaca Gedit gedica Data 28 octombrie 2015 19:38:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>

using namespace std;

const int NMAX= 15000;

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

int v[NMAX+1], aib[NMAX+1], N;

void upd( int poz, int nr )
{
    for( int i= poz; i<=N; i+= i-(i&(i-1)) )
    {
        aib[i]+= nr;
    }
}

int query( int pos )
{
    int s= 0;
    for( int i= pos; i>=1; i-= i-(i&(i-1)) )
    {
        s+= aib[i];
    }
    return s;
}

int main(  )
{
    int M;
    in >> N >> M;
    for( int i= 1; i<=N; ++i )
    {
        in >> v[i];
        upd( i, v[i] );
    }
    for( int i= 1; i<=M; ++i )
    {
        int a, b, c;
        in >> a >> b >> c;
        if( a==0 )
        {
            upd( b, -c );
        }
        else
        {
            out << query( max( b, c ) )-query( min( b, c )-1 ) << '\n';
        }
    }

    return 0;
}