Cod sursa(job #1933425)

Utilizator nedelcu11Nedelcu Mihai Vlad nedelcu11 Data 20 martie 2017 18:24:29
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
using namespace std;
ifstream f("aib.in"); ofstream g("aib.out");
int t,a,b,n,m,x,c[100001];
void update(int poz, int val){
    for(int i=poz; i<=n; i+= (i & -i)) c[i]+=val;
}
int sum(int st, int dr){
    int s=0;
    for(int i=dr; i; i-=(i & -i)) s+=c[i];
    for(int i=st-1; i; i-=(i & -i)) s-=c[i];
    return s;
}
void query(int a){
    int st=1, dr=n;
    int mid,acm;
    while(st<=dr){
        mid=(st+dr)/2;
        acm=sum(1,mid);
        if(acm==a){ g<<mid<<'\n'; return ;}
        if(acm>a) { dr=mid-1; continue;}
        else st=mid+1;
    }
    g<<-1<<'\n';
}
int main(){
    f>>n>>m;
    for(int i=1;i<=n;++i){ f>>x; update(i,x);}
    for(int i=1;i<=m;++i){
        f>>t;
        if(t==2){
            f>>a;
            query(a);
        }
        else{
            f>>a>>b;
            if(t==0) update(a,b);
            else g<<sum(a,b)<<'\n';
        }
    }
    g.close();
    return 0;
}