Cod sursa(job #2005387)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 26 iulie 2017 22:33:17
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int aib[100001],v[100001],n;
int query( int a , int b ){
    int ansa = 0, ansb = 0;
    for( int i = b; i >= 1; i -= ( i & (-i) ) ){
        ansb +=aib[i];
    }
    for( int i = a-1; i >= 1; i -= ( i & (-i) ) ){
        ansa +=aib[i];
    }
    return ansb-ansa;
}
void update( int x, int val ){
    for( int i = x; i <= n; i += (i & (-i))){
        aib[i] += val;
    }
    return;
}
int m,i,t,a,b,x,val,k,dr,mid,st,alfa;
int main( void ){
    in >> n >> m;
    for( i = 1; i <= n; i ++ ){
        in >> v[i];
        update( i, v[i] );
    }
    for( i = 1; i <= m; i ++ ){
        in >> t ;
        if( t == 0 ){
            in >> x >> val;
            update( x,val);
        }
        if( t == 1 ){
            in >> a >> b;
            out << query( a,b )<<"\n";
        }
        if( t == 2 ){
            in >> k;
            for( st = 1, dr = n; st <= dr; ){
                mid = (st + dr) >> 1;
                alfa = query( 1,mid );
                if( alfa < k ){
                    st = mid + 1;
                }
                else{
                    dr = mid - 1;
                }
            }
            out<<st<<"\n";
        }
    }
    return 0;
}