Cod sursa(job #1507352)

Utilizator AndreiIstetulAndrei Andrei AndreiIstetul Data 21 octombrie 2015 17:05:23
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <array>

#define MX 15001

std::fstream in("datorii.in", std::fstream::in), out("datorii.out", std::fstream::out);

int n, m, sw, a, b;
std::array<int, MX> aib;

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

void update(int poz, int val)
{
	for (int i = poz; i <= n; i += zeros(i)) aib[i] += val;
}

int sum(int poz)
{
	int s = 0;
	for (; poz; poz -= zeros(poz)) s += aib[poz];
	return s;
}

int main()
{
    in >> n >> m;

    for (sw = 1; sw <= n; ++sw)
    {
        in >> a;
        update(sw, a);
    }

    for (; m; --m)
    {
        in >> sw >> a >> b;

        switch (sw)
        {
        case 0:
            update(a, -b);
            break;

        case 1:
            out << sum(b) - sum(a - 1) << "\n";
            break;
        }
    }



    return 0;
}