Cod sursa(job #3349397)

Utilizator cezarinfoTulceanu Cezar cezarinfo Data 28 martie 2026 21:20:00
Problema Arbori indexati binar Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const long long NMAX=100007;
long long aib[NMAX],v[NMAX];
long long n,m,c;
long long a,b;
void up(long long i,long long val){
    for(;i<=n;i+=i&-i)
    {
        aib[i]+=val;
    }
}
long long qersum(long long i){//suma pe 1,2,3...,i
    long long sum=0;
    for(;i>0;i-=i&-i)
    {
        sum+=aib[i];
    }
    return sum;
}
long long qerk(long long a){
    long long bit=1;
    while(bit<=n)
    {
        bit=bit<<1;
    }
    long long k=0;
    while(bit>=2)
    {
        bit=bit>>1;
        k+=bit;
        if(k<=n&&aib[k]<=a)
        {
            a-=aib[k];
        }
        else
        {
            k-=bit;
        }
    }
    if(a==0)
    {
        return k;
    }
    else{return -1;}
}
int main()
{
    in>>n>>m;
    for(long long i=1;i<=n;i++)
    {
        in>>v[i];
        up(i,v[i]);
    }
    for(long long j=1;j<=m;j++)
    {
        in>>c;
        if(c==0)
        {
            in>>a>>b;
            up(a,b);
        }
        else if(c==1)
        {
            in>>a>>b;
            out<<qersum(b)-qersum(a-1)<<"\n";
        }
        else{
            in>>a;
            out<<qerk(a)<<"\n";
        }
    }
}