Cod sursa(job #2186175)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 25 martie 2018 13:36:08
Problema Arbori indexati binar Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <algorithm>
#define indice(x) ((x^(x-1))&x)
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");



int n,S[100100],AIB[100100];

int suma (int x)
{
    int i,s=0;
    for(i=x;i>0;i-=indice(i))
        s+=AIB[i];
    return s;
}




void adaug (int x,int val)
{
    int i;
    for(i=x;i<=n;i+=indice(i))
        AIB[i]+=val;

    for(i=x;i<=n;i++)
        S[i]=suma(i);

}


int m,i,x,c,poz,y;
int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        adaug(i,x);
        S[i]=suma(i);
    }


    for(i=1;i<=m;i++)
    {
        f>>c;

        if(c==0){f>>x>>y;adaug(x,y);}
        else if(c==1){f>>x>>y;g<<suma(y)-suma(x-1)<<'\n';}
        else
        {
            f>>x;
            poz=lower_bound(S+1,S+n+1,x)-S;
            if(S[poz]==x){g<<poz<<'\n';}
            else g<<-1<<'\n';
        }
    }
    return 0;
}