Cod sursa(job #2186182)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 25 martie 2018 13:40:08
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 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;
}


int m,i,x,p,u,mij,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;
           p=1;u=n;poz=-1;
           while(p<=u)
           {
               mij=(p+u)/2;
               if(suma(mij)==x){poz=mij;p=mij+1;}
               else if(suma(mij)>x){u=mij-1;}
               else {p=mij+1;}
           }
    g<<poz<<'\n';

        }
    }
    return 0;
}