Cod sursa(job #2610898)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 5 mai 2020 21:00:34
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#define ub(x) (x&(-x))

using namespace std;

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

constexpr int NMAX = 15e3 + 5;

int aib[NMAX];
int N;

void Update (int poz, int val)
{
    for (int i = poz; i <= N; i += ub(i))
        aib[i] -= val;
}

int Query (int poz)
{
    int S = 0;

    for (int i = poz; i > 0; i -= ub(i))
        S += aib[i];

    return S;
}

void Tip_0 ()
{
    int a, b;

    f >> a >> b;

    Update(a, b);
}

void Tip_1 ()
{
    int a, b;

    f >> a >> b;

    g << Query(b) - Query(a-1) << '\n';
}

void Read_and_Solve ()
{
    int M;

    f >> N >> M;

    for (int i = 1; i <= N; ++i)
    {
        int x;

        f >> x;

        Update(i, -x);
    }

    for (; M; --M)
    {
        int Task;

        f >> Task;

        if (Task == 0) Tip_0();
        if (Task == 1) Tip_1();
    }
}

int main ()
{
    Read_and_Solve();

    return 0;
}