Cod sursa(job #2387702)

Utilizator vlad6001Pintilie Vlad vlad6001 Data 25 martie 2019 08:23:26
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#define zeros(x) x&(x^(x-1))
using namespace std;

ifstream cin("datorii.in");
ofstream cout("datorii.out");

int nr, operatii, cost, aib[100004], tip, T, V, st, dr;

void aduna(int poz, int val)
{
    aib[poz] += val;
    poz += zeros(poz);
    if(poz <= nr)
    aduna(poz, val);
}

int CALC(int poz)
{
    int total=0;
    total += aib[poz];
    poz -= zeros(poz);
    if(poz > 0)
    total += CALC(poz);

    return total;
}

int main()
{
    cin >> nr >> operatii;
    for(int i=1; i <= nr; i++)
    {
        cin >> cost;
        aduna(i, cost);
    }

    for(int i=1; i <= operatii; i++)
    {
        cin >> tip;
        if(tip == 0)
        {
            cin >> T >> V;
            aduna(T, -V);
        }
        else
        if(tip == 1)
        {
            cin >> st >> dr;
            cout << CALC(dr)-CALC(st-1) << '\n';
        }
    }
}