Cod sursa(job #1812418)

Utilizator vladbatalanBatalan Vlad vladbatalan Data 22 noiembrie 2016 08:19:02
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");

int aib[100010],n,m,op,a,b,x;

void update(int poz, int val)
{
    for(; poz<=n; poz+=((-poz)&poz))
        aib[poz]+=val;
}

int sum(int poz)
{
    int C = 0, S = 0;
    while (poz > 0)
    {
          S += aib[poz];
          while ( !(poz & (1<<C)) ) C++;
          poz -= (1<<C);
          C += 1;
    }
    return S;
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>x;
        update(i,x);
    }
    while(m--)
    {
        fin>>op;
        switch(op)
        {
            case 0:
                fin>>a>>b;
                update(a,b);
                break;
            case 1:
                fout<<sum(b)-sum(a-1)<<'\n';
                break;
        }
    }
    return 0;
}