Cod sursa(job #2392150)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 29 martie 2019 18:45:05
Problema Arbori indexati binar Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <cstdio>

using namespace std;

int s[100005];
int n,m,x,c,a,b;

void adauga(int i, int val)
{
    for(int j=i; j<=n; j+=(j&(-j)))
        s[j]+=val;
}

int suma(int poz)
{
    int ret = 0;
    for(int i = poz; i>=1; i-=(i&(-i)))
        ret+=s[i];
    return ret;
}

void kapa(int val){
    int start=0,putere;
    for(putere=1;putere<n;putere*=2);
    for(putere;putere!=0 && val!=0;putere/=2){
        if(start+putere<=n)
        if(s[putere+start]<=val){
            val-=s[putere+start];
            start+=putere;
        }
    }
    if(val==0)
        cout<<start<<"\n";
    else
        cout<<"-1\n";
}

int main()
{
    freopen("aib.in","r",stdin);
    freopen("aib.out","w",stdout);

    ios::sync_with_stdio(false);

    cin>>n>>m;
    for(int i=1; i<=n; ++i)
    {
        cin>>x;
        adauga(i,x);
    }

    for(int i=0; i<m; ++i)
    {
        cin>>c>>a;
        if(c<2)
        {
            cin>>b;
            if(c==0)
                adauga(a,b);
            else if(c==1)
                cout<<suma(b)-suma(a-1)<<"\n";
        }
        else{
            kapa(a);
        }
    }

    return 0;
}