Cod sursa(job #2384518)

Utilizator radugnnGone Radu Mihnea radugnn Data 20 martie 2019 20:27:27
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int N,M,i,v,T,a,b,A[100010];
int q(int p){
    int sol=0;
    for(;p;p-=(p&-p))
        sol+=A[p];
    return sol;
}
void up(int a, int b){
    for(;a<=N;a+=(a&-a))
        A[a]+=b;
}
int poz(int sum){
    int st=1,dr=N;
    while(st<=dr){
        int mid = (st+dr)/2;
        if(q(mid)>=sum)
            dr=mid-1;
        else
            st=mid+1;
    }

        if(q(st)==sum)
            return st;
        else
            return -1;

}

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

    for(i=1;i<=M;i++){
        fin>>T;
        if(T==0){
            fin>>a>>b;
            up(a,b);
        }
        else
        if(T==1){
            fin>>a>>b;
            fout<<q(b)-q(a-1)<<"\n";

        }
        else{
            fin>>a;
            fout<<poz(a)<<"\n";
        }
    }
    return 0;
}