Cod sursa(job #3352142)

Utilizator dargrigaDarius Griga dargriga Data 24 aprilie 2026 11:57:00
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>
#define NMAX 100000

using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int v[NMAX+5], aib[NMAX+5];
int n, m;
void update(int poz, int x)
{
    while(poz<=n)
    {
        aib[poz]+=x;
        poz+=poz&(-poz);
    }
}
int query(int i)
{
    int s=0;
    while(i>0)
    {
        s+=aib[i];
        i-=i&(-i);
    }
    return s;
}
int cb(int a)
{
    int st=1, dr=n, mij, calc;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        calc=query(mij);
        if(calc>a)
            dr=mij-1;
        else if(calc<a)
            st=mij+1;
        else
            return mij;
    }
    return -1;
}
int main()
{
    f >> n >> m;
    for(int i=1; i<=n; i++)
    {
        f >> v[i];
        update(i, v[i]);
    }
    for(int i=1; i<=m; i++)
    {
        int tip, a, b;
        f >> tip;
        if(tip==0)
        {
            f >> a >> b;
            update(a, b);
        }
        else if(tip==1)
        {
            f >> a >> b;
            g << query(b)-query(a-1) << '\n';
        }
        else if(tip==2)
        {
            f >> a;
            g << cb(a) << '\n';
        }
    }
    return 0;
}