Cod sursa(job #1902721)

Utilizator Mihai9Oniga Mihai Mihai9 Data 4 martie 2017 19:12:19
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <bits/stdc++.h>
 
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
void add(int,int);
int n,m,a,b,c,i,lo,hi,mi,v[100010],suma(int);
int main(){
    f>>n>>m;
    for(i=1;i<=n;i++){f>>a;add(i,a);}
    for(;m;m--){
     f>>c;
     if(c==0){f>>a>>b;add(a,b);continue;}
     if(c==1){f>>a>>b;g<<suma(b)-suma(a-1)<<'\n';continue;}
     for(f>>a,lo=0,hi=n;hi-lo>1;){mi=(lo+hi)/2;if(suma(mi)<a)lo=mi;else hi=mi;}
     if(suma(hi)!=a)hi=-1;
     g<<hi<<'\n';
    }
    return 0;
}
void add(int i,int x){for(;i<=n;i+=i&(-i))v[i]+=x;}
int suma(int i){int x=0;for(;i;i-=i&(-i))x+=v[i];return x;}