Cod sursa(job #1849551)

Utilizator teodorgTeodor G teodorg Data 17 ianuarie 2017 17:43:34
Problema Arbori indexati binar Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 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;}