Cod sursa(job #2736254)

Utilizator levladiatorDragutoiu Vlad-Ioan levladiator Data 3 aprilie 2021 12:09:55
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>

using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");

const int NMAX =1e5+5;

int N,aib[NMAX];

void add(int poz,int val)
{
    while(poz<=N)
    {
        aib[poz]+=val;
        poz+=poz&(-poz);
    }
}
int sum(int poz)
{
    int s=0;
    while(poz>0)
    {
        s+=aib[poz];
        poz&=(poz-1);
    }
    return s;
}
int bsearch(int val)
{
    int i,step;
    for(step=1;step<N;step<<=1);
    for(i=0;step>0;step>>=1)
    {
        int poz=i+step;
        if(poz<=N&&aib[poz]<=val)
        {
            val-=aib[poz];
            i=poz;
            if(val==0)return  i;
        }
    }
    return -1;
}

int main()
{
    int M,op,x,y;
    fin>>N>>M;
    for(int i=1;i<=N;i++)
    {
        fin>>x;
        add(i,x);
    }
    while(M--)
    {
        fin>>op;
        switch(op)
        {
        case 0:
            fin>>x>>y;
            add(x,y);
            break;
        case 1:
            fin>>x>>y;
            fout<<sum(y)-sum(x-1)<<'\n';
            break;
        case 2:
            fin>>x;
            fout<<bsearch(x)<<'\n';
        }
    }
    return 0;
}