Cod sursa(job #2451705)

Utilizator PetrescuAlexandru Petrescu Petrescu Data 27 august 2019 20:21:31
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#define MAX 15001
#define zeroes(i)(i & -i)

using namespace std;

int sp[MAX], aib[MAX];

void update(int n, int x, int val)
{
    int i;

    for(i = x; i <= n; i += zeroes(i))aib[i] -= val;
}

int compute(int st, int dr)
{
    int i, sumaSt, sumaDr;

    sumaDr = sumaSt = 0;

    for(i = dr; i > 0; i -= zeroes(i))sumaDr += aib[i];

    for(i = st - 1; i > 0; i -= zeroes(i))sumaSt += aib[i];

    return sumaDr - sumaSt;
}

int main()
{
    int n, m, i, a, b, c;

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

    fin >> n >> m;

    for(i = 1; i <= n; i++)
    {
        fin >> a;
        sp[i] = sp[i - 1] + a;
        aib[i] = sp[i] - sp[i - zeroes(i)];
    }

    for(i = 0; i < m; i++)
    {
        fin >> a >> b >> c;

        if(a == 1)fout << compute(b, c) << '\n';
        else update(n, b, c);
    }

    fin.close();
    fout.close();

    return 0;
}