Cod sursa(job #1760264)

Utilizator preda.andreiPreda Andrei preda.andrei Data 20 septembrie 2016 16:51:08
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <iostream>

using namespace std;

inline int putere_zerouri(int n)
{
    return (n ^ (n - 1)) & n;
}

void update(int d[], int zi, int n, int val)
{
    while (zi <= n) {
        d[zi] += val;
        zi += putere_zerouri(zi);
    }
}

int suma_datorii(int d[], int zi)
{
    int suma = 0;
    while (zi > 0) {
        suma += d[zi];
        zi -= putere_zerouri(zi);
    }
    return suma;
}

int interogare(int d[], int a, int b)
{
    return suma_datorii(d, b) - suma_datorii(d, a - 1);
}

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

    int n, m;
    fin >> n >> m;

    int datorii[n + 1] = {0};
    for (int i = 1; i <= n; ++i) {
        int a;
        fin >> a;
        update(datorii, i, n, a);
    }

    while (m--) {
        int r, a, b;
        fin >> r >> a >> b;

        if (r == 0)
            update(datorii, a, n, -b);
        else fout << interogare(datorii, a, b) << "\n";
    }

    return 0;
}