Cod sursa(job #1948523)

Utilizator ciprianprohozescuProhozescu Ciprian ciprianprohozescu Data 1 aprilie 2017 10:49:42
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#define NMAX 15010

using namespace std;

FILE *fin, *fout;

int n, m, aib[NMAX];

void update(int x, int q);
int calcul(int x);
int zeros(int x);

int main()
{
    int i, a, b, tip;
    fin = fopen("datorii.in", "r");
    fout = fopen("datorii.out", "w");
    fscanf(fin, "%d%d", &n, &m);
    for (i = 1; i <= n; i++)
    {
        fscanf(fin, "%d", &a);
        update(i, a);
    }
    for (i = 1; i <= m; i++)
    {
        fscanf(fin, "%d%d%d", &tip, &a, &b);
        if (!tip)
            update(a, -b);
        else
            fprintf(fout, "%d\n", calcul(b) - calcul(a - 1));
    }
    fclose(fout);
    return 0;
}

void update(int x, int q)
{
    int i;
    for (i = x; i <= n; i += zeros(i))
        aib[i] += q;
}
int calcul(int x)
{
    int i, rez = 0;
    for (i = x; i > 0; i -= zeros(i))
        rez += aib[i];
    return rez;
}
int zeros(int x)
{
    return (x & (-x));
}