Cod sursa(job #3345782)

Utilizator dargrigaDarius Griga dargriga Data 11 martie 2026 09:14:55
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

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