Cod sursa(job #2442457)

Utilizator mirceaisherebina mircea mirceaishere Data 24 iulie 2019 00:52:18
Problema Arbori indexati binar Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");

int n, m, i, j, a[100002], x, t;

void update(int indice, int nr){
    while(indice<=n){
        a[indice]+=nr;
        indice+=(indice&-indice);
    }
}

int suma(int indice){
    int s=0;
    while(indice>0){
        s+=a[indice];
        indice-=(indice&-indice);
    }
    return s;
}

int main(){
    fin>>n>>m;
    for(i=1; i<=n; i++){
        fin>>x;
        update(i, x);
    }
    for(i=1; i<=m; i++){
        fin>>t;
        if(t==0){
            int p, val;
            fin>>p>>val;
            update(p, val);
        }
        if(t==1){
            int st, dr;
            fin>>st>>dr;
            fout<<suma(dr)-suma(st-1)<<"\n";
        }
        if(t==2){
            int sumacautata;
            fin>>sumacautata;
            int st=0;
            int dr=n+1;
            while(st<=dr){
                int mid=(st+dr)/2;
                if(suma(mid)<sumacautata){
                    st=mid+1;
                }else{
                    dr=mid-1;
                }
            }
            if(suma(st)==sumacautata){
                fout<<st<<"\n";
            }else{
                fout<<"-1"<<"\n";
            }
        }
    }
}