Cod sursa(job #1014514)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 22 octombrie 2013 20:26:35
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>

using namespace std;

const int Nmax = 15005;

int N, M;
int BIT[Nmax];

inline int lsb( int x )
{
    return ( x & ( -x ) );
}

void update( int x, int val )
{
    for ( int i = x; i <= N; i += lsb( i ) )
            BIT[i] += val;
}

int query( int x )
{
    int s = 0;

    for ( int i = x; i >= 1; i -= lsb( i ) )
            s += BIT[i];

    return s;
}

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

    f >> N >> M;

    int st, dr, val, tip;

    for ( int i = 1; i <= N; ++i )
    {
        f >> val;

        update( i, val );
    }

    for ( int i = 1; i <= M; ++i )
    {
        f >> tip;

        if ( tip == 0 )
        {
            f >> st >> val;

            update( st, -val );
        }
        else
        {
            f >> st >> dr;

            g << query( dr ) - query( st - 1 ) << "\n";
        }
    }

    return 0;
}