Cod sursa(job #2013704)

Utilizator Coroian_DavidCoroian David Coroian_David Data 22 august 2017 10:03:00
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>

#define MAX_N 15000

using namespace std;

FILE *f, *g;

void add(int i, int nr);

int n, m;

int aib[MAX_N + 1];

int pasul;

void readFile()
{
    f = fopen("datorii.in", "r");

    fscanf(f, "%d%d", &n, &m);

    pasul = 1;
    while(pasul < n)
        pasul <<= 1;

    int i;
    int nr;
    for(i = 1; i <= n; i ++)
    {
        fscanf(f, "%d", &nr);

        add(i, nr);
    }
}

void add(int i, int nr)
{
    while(i <= n)
    {
        aib[i] += nr;

        i += i & (-i);
    }
}

int suma(int a)
{
    int rez = 0;

    while(a > 0)
    {
        rez += aib[a];

        a = a & (a - 1);
    }

    return rez;
}

void ansQues()
{
    g = fopen("datorii.out", "w");

    int type;
    int a, b;
    while(m > 0)
    {
        m --;

        fscanf(f, "%d", &type);

        if(type < 2)
        {
            fscanf(f, "%d%d", &a, &b);

            if(type == 0)
                add(a, -b);

            else
                fprintf(g, "%d\n", suma(b) - suma(a - 1));
        }
    }

    fclose(g);
}

int main()
{
    readFile();

    ansQues();

    return 0;
}