Cod sursa(job #903206)

Utilizator vgabi94Vaduva Gabriel vgabi94 Data 1 martie 2013 19:07:59
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
using namespace std;

ifstream in("datorii.in");
ofstream out("datorii.out");
const int maxn = 15002;
int N, M;
int sume[maxn];

void update(int val, int ind)
{
    int poz = 0;
    while (ind <= N)
    {
        sume[ind] += val;
        while ((ind & (1 << poz)) == 0) ++poz;
        ind += (1 << poz);
        poz++;
    }
}

int findSum(int ind)
{
    int poz = 0, sum = 0;
    while (ind > 0)
    {
        sum += sume[ind];
        while ((ind & (1 << poz)) == 0) ++poz;
        ind -= (1 << poz);
        poz++;
    }
    return sum;
}

int query(int st, int dr)
{
    return findSum(dr) - findSum(st-1);
}

int main()
{
    in >> N >> M; int cod, x, y;
    for (int i = 1; i <= N; i++) { in >> x; update(x, i); }
    for (int i = 1; i <= M; i++)
    {
        in >> cod;
        if (cod == 0) {
            in >> x >> y;
            update(-y, x);
        }
        else {
            in >> x >> y;
            out << query(x, y) << '\n';
        }

    }
    return 0;
}