Cod sursa(job #2884252)

Utilizator Mihai_EduardMihai Eduard Mihai_Eduard Data 2 aprilie 2022 18:50:19
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX=100005;

int N, M, aib[NMAX];

void update(int poz, int val){
    for(int i=poz;i<=N;i+=(i&-i))
        aib[i]+=val;
}

int query(int poz){
    int sum=0;
    for(int i=poz;i>=1;i-=(i&-i))
        sum+=aib[i];
    return sum;
}

int binarySearch(int val){
    int st=1, dr=N, mij, sum;
    while(st<=dr){
        mij=(st+dr)/2;
        sum=query(mij);
        if(sum==val)
            return mij;
        if(sum<val)
            st=mij+1;
        else
            dr=mij-1;
    }
    return -1;
}

int main()
{
    fin>>N>>M;
    int val;
    for(int i=1;i<=N;i++){
        fin>>val;
        update(i,val);
    }

    int tip, a, b;
    while(M--){
        fin>>tip;
        if(tip==0){
            fin>>a>>b;
            update(a,b);
        }
        else if(tip==1){
            fin>>a>>b;
            fout<<query(b)-query(a-1)<<'\n';
        }
        else{
            fin>>a;
            fout<<binarySearch(a)<<'\n';
        }
    }

    fin.close();
    fout.close();
    return 0;
}