Cod sursa(job #2376249)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 8 martie 2019 14:27:55
Problema Arbori indexati binar Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
#define indice(x) (x&(-x))

using namespace std;

ifstream f("aib.in");
ofstream g("aib.out");


int n,AIB[100100];

void adaug(int poz,int val)
{
    int j;
    for(j=poz;j<=n;j=j+indice(j))
        AIB[j]+=val;
}


int suma(int poz)
{
    int j,S=0;
    for(j=poz;j>=1;j=j-indice(j))
        S+=AIB[j];

    return S;
}


int m,i,c,a,b,p,u,mij,cp,val;

int main()
{


    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>val;
        adaug(i,val);
    }
    for(i=1;i<=m;i++)
    {
        f>>c;
        if(c==0)
        {
            f>>a>>b;
            adaug(a,b);
        }
        else if(c==1)
        {
            f>>a>>b;
            g<<suma(b)-suma(a-1)<<'\n';
        }
        else if(c==2)
        {
            f>>a;

            p=1;u=n;
            cp=0;
            while(p<=u)
            {
                mij=(p+u)/2;
                if(suma(mij)>a){u=mij-1;}
                else
                {
                    cp=mij;
                    p=mij+1;
                }
            }

            if(suma(cp)==a)g<<cp<<'\n';
            else g<<-1<<'\n';

        }
    }


    return 0;
}