Cod sursa(job #2853092)

Utilizator rARES_4Popa Rares rARES_4 Data 19 februarie 2022 21:13:06
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("aib.in");
ofstream g ("aib.out");
int n,c,a,b,m;
int arbore[100001];
int nr_de_zerouri(int x)
{
    return x&(-x);
}
void adaugare(int nr,int indice)
{
    for(int i = indice; i<=n; i+=nr_de_zerouri(i))
    {
        arbore[i]+=nr;
    }
}
int suma(int indice)
{
    int s = 0;
    for(int i = indice; i>=1; i-=nr_de_zerouri(i))
    {
        s+=arbore[i];
    }
    return s;
}
void citire()
{
    f >> n >> m;
    int x;
    for(int i = 1; i<=n; i++)
    {
        f >> x;
        adaugare(x,i);
    }
}
int cb(int a)
{
    int st = 1,dr = n,mij;
    int rasp = -1;
    while(st<=dr)
    {

        mij= (st+dr)/2;
        if(suma(mij) == a)
        {
            rasp = mij;
            dr = mij-1;
        }
        else if(suma(mij)>a)
        {
            dr = mij-1;
        }
        else
            st = mij+1;
    }
}
int main()
{
    citire();
    for(int i = 1; i<=m; i++)
    {
        f >> c;
        if(c == 0)
        {
            f>> a >> b;
            adaugare(b,a);
        }
        if(c == 1)
        {
            f>> a >> b;
            g << suma(b) - suma(a-1)<< '\n';
        }
        if(c == 2)
        {
            f>> a;
            g << cb(a)<< endl;
        }
    }
}