Cod sursa(job #1434735)

Utilizator Toast97Calin Farcas Toast97 Data 11 mai 2015 11:41:05
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;

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

int AIB [15005], n, m;

int pas (int x)
{
    return (x ^ (x-1)) & x;
}

void adauga (int poz, int val)
{
    int i;

    for (i = poz; i <= n; i += pas (i))
        AIB[i] += val;
}

int suma (int poz)
{
    int i, rez = 0;

    for (i = poz; i > 0; i -= pas (i))
        rez += AIB[i];

    return rez;
}

void creare ()
{
    f >> n >> m;

    int nr;

    for (int i = 1; i <= n; i ++)
    {
        f >> nr;

        adauga (i, nr);
    }
}

int main()
{
    creare ();

    int tip, a, b;

    for (int i = 1; i <= m; i ++)
    {
        f >> tip >> a >> b;

        if (! tip)
            adauga (a, -b);
        else
            g << suma(b) - suma(a - 1) << '\n';
    }

    f.close ();
    g.close ();
    return 0;
}