Cod sursa(job #2313414)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 6 ianuarie 2019 20:45:38
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#define Dim 100006
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int N,M,AIB[Dim],dif;
int op,a,b;

void Update(int it)
{
    do
    {
        AIB[it]+=dif;
        it+= it & -it;

    }while(it<=N);
}

int SUM(int it)
{
    int s=0;
    while(it)
    {
        s+=AIB[it];
        it&=it-1;
    }
    return s;
}

int main()
{
    f>>N>>M;
    for(int i=1;i<=N;i++)
    {
        f>>a;
        dif=a;
        Update(i);
    }
    for(int i=1;i<=M;i++)
    {
        f>>op;
        if(op==0)
        {
            f>>a>>b;
            dif=b;
            Update(a);
        }
        else
        if(op==1)
        {
            f>>a>>b;
            g<<SUM(b)-SUM(a-1)<<'\n';
        }
        else
        {
            f>>a;
            bool stop=0;
            for(int i=1;i<=N;i*=2)
            if(SUM(i)==a)
            {
                g<<i<<'\n';
                stop=1;
            }
            if(stop==0) g<<-1<<'\n';
        }
    }
    return 0;
}