Cod sursa(job #2445129)

Utilizator MihaIonescuMihai Ionescu MihaIonescu Data 2 august 2019 16:44:17
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
///arbori indexati binar (AIB)
#include <fstream>
using namespace std;

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

int aib[15001];

void adauga (int val, int i, int l) //adauga val pe pozitia x
{
    do
    {
        aib[i] += val;
        i += (i & -i);
    } while (i<=l);
}

int suma (int i)
{
    int s = 0;
    while (i)
    {
        s += aib[i];
        i &= ( i-1 );
    }
    return s;
}

int main ()
{
    int n, m, i, x, y;
    short tip;

    f>>n>>m;

    for (i=1; i<=n; i++)
    {
        f>>x;
        adauga (x, i, n);
    }

    for (i=1; i<=m; i++)
    {
        f>>tip;
        f>>x>>y;
        if (tip==0) //y = ziua, x = valoarea scazuta
            adauga (-y, x, n);
        else    //suma din intervalul [x, y]
            g<<suma(y) - suma(x-1)<<'\n';

    }
}