Cod sursa(job #968622)

Utilizator crisbodnarCristian Bodnar crisbodnar Data 2 iulie 2013 13:25:07
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

const int N = 15005;

int n, m;
vector <int> arb(N, 0);

void Add(int p, int v)
{
    while(p <= n)
    {
        arb[p] += v;
        p += (p^(p-1)) & p;
    }
}

void Edit(int p, int v)
{
    while(p <= n)
    {
        arb[p] -= v;
        p += (p^(p-1)) & p;
    }
}

int Sum(int p)
{
    int s = 0;
    while(p)
    {
        s += arb[p];
        p -= (p^(p-1)) & p;
    }
    return s;
}

int main()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
    {
        int x;
        fin>>x;
        Add(i, x);
    }

    while(m--)
    {
        int cod, a, b;
        fin>>cod>>a>>b;
        if(!cod)
            Edit(a, b);
        else
            fout<<Sum(b)-Sum(a-1)<<'\n';
    }
    return 0;
}