Cod sursa(job #2384780)

Utilizator canmihaiCancescu Mihai canmihai Data 21 martie 2019 10:20:56
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <IOstream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout ("aib.out");
int n,m,x,aib[100010],k,a,b;
void update(int i, int y) {
    while (i<=n) {
        aib[i]+=y;
        i+=i&-i;
    }
}
int sum(int i) {
    int sol=0;
    while (i){
        sol+=aib[i];
        i-= i&-i;
    }
    return sol;
}
int findMinPos(int y) {
    int l=1,r=n;
    while (l<=r) {
        int m=(l+r)/2;
        int s=sum(m);
        if (s==y)
            return m;
        else
            if (s<y)
                l=m+1;
            else
                r=m-1;
    }
    return -1;
}
int main() {
    fin>>n>>m;
    for (int i=1;i<=n;i++) {
        fin>>x;
        update(i,x);
    }
    while (m--){
        fin>>k;
        if (k==0) {
            fin>>a>>b;
            update(a,b);
        } else
            if(k==1){
                fin>>a>>b;
                fout<<sum(b)-sum(a-1)<<"\n";
        }
        else {
            fin>>a;
            fout<<findMinPos(a)<<"\n";
        }
    }
}