Cod sursa(job #2658670)

Utilizator spartanul300Vasile Andrei spartanul300 Data 14 octombrie 2020 18:25:49
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
#define bits(i) (i&(-i))

using namespace std;

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

int n,AIB[100100];

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

int suma(int poz)
{
    int S=0;
    for(int i=poz;i>=1;i-=bits(i))
        S+=AIB[i];

    return S;
}

int m,a,b,p,u,mij,poz_sol,cerinta,x,i;

int main()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        adaug(i,x);
    }
    for(i=1;i<=m;i++)
    {

        f>>cerinta;
        if(cerinta==0)
        {
            f>>a>>b;
            adaug(a,b);
        }
        else if(cerinta==1)
        {
            f>>a>>b;
            g<<suma(b)-suma(a-1)<<'\n';
        }
        else
        {
            f>>a;
            p=1;u=n;
            while(p<=u)
            {
                mij=(p+u)/2;
                if(suma(mij)>a)u=mij-1;
                else poz_sol=mij,p=mij+1;
            }

            if(suma(poz_sol)==a)g<<poz_sol<<'\n';
            else g<<-1<<'\n';
        }
    }
    return 0;
}