Cod sursa(job #2600211)

Utilizator eugen5092eugen barbulescu eugen5092 Data 12 aprilie 2020 11:55:46
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>
using namespace std;

ifstream ci("aib.in");
ofstream cou("aib.out");
int n,m;
int aib[100010];
int c,a,b;

void Update(int p, int x)
{
    while(p <= n)
    {
        aib[p] += x;
        p = p + (p & (-p));
    }
}

int Suma(int p)
{
    int s = 0;
    while(p > 0)
    {
        s = s + aib[p];
        p = p - (p & (-p));
    }
    return s;
}

void citire(){
    int x;
    int i;
    ci>>n>>m;
    for(i=1;i<=n;i++){
        ci>>x;
        Update(i,x);
    }

}

void rez(){

    while(m--){
        ci>>c;
        if(c==0){
            ci>>a>>b;
            Update(a,b);
        }
        if(c==1){
            ci>>a>>b;
            cou<<Suma(b)-Suma(a-1)<<"\n";
        }
        if(c==2){
            ci>>a;
            int st=1,dr=n,mij,sol=-1,S;

            while(st<=dr){
                mij=(st+dr)/2;
                S=Suma(mij);
                if(S==a){
                    sol=mij;
                    dr=mij-1;
                }else
                if(S>a){
                    dr=mij-1;
                }else{
                    st=mij+1;
                }
            }
            cou<<sol<<"\n";
        }
    }


}

int main()
{
    citire();
    rez();
    return 0;
}