Cod sursa(job #1120105)

Utilizator NarTooNNever Roll NarTooN Data 24 februarie 2014 21:32:15
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
//http://www.infoarena.ro/problema/datorii
#include<fstream>
#define Nmax 15010
#define lsb(x) (x & -x)
using namespace std;

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

int N, M, AIB[Nmax];

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

}

int query(int x)
{
    int res=0;
    for (int i = x; i; i -= lsb(i))
        res += AIB[i];
    return res;
}

int main()
{
    int op, a, b, i;
    f >> N >> M;
    for (i = 1; i <= N; ++i)
    {
        f >> a;
        update(i, a);
    }
    for (i = 1; i <= M; ++i)
    {
        f >> op>>a>>b;
        switch (op)
        {
        case 0: update(a, -b); break;
        case 1: g << query(b) - query(a - 1) << '\n'; break;
        }
    }
    f.close();
    g.close();
    return 0;
}