Cod sursa(job #2711023)

Utilizator mihnea.anghelMihnea Anghel mihnea.anghel Data 23 februarie 2021 16:34:36
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#define f in
#define g out

using namespace std;
ifstream in ( "aib.in" );
ofstream out( "aib.out" );
int n, m, i, x, op, poz, y;
int a[100100], v[100100];


int lsb ( int x ){
    return x&(-x);
}

void update ( int i, int x ){
    for ( ; i <= n; i += lsb(i) )
        a[i] += x;
}

int query ( int i ){
    int sum = 0;
    for ( ; i != 0; i -= lsb(i) )
        sum += a[i];
    return sum;
}

int query2 ( int k ){
    int st = 1, dr = n, mid;
    while ( st <= dr ) {
        mid = (st+dr)/2;
        if ( query(mid) >= k )
            dr = mid-1;
        else st = mid+1;
    }
    if ( query(st) != k )
        return -1;
    return st;
}

int main() {
    f>>n>>m;
    for ( i=1; i <= n; i++ ){
        f>>x;
        update(i, x);
    }
    
    for ( ; m--; ){
        f>>op;
        if ( !op ){
            f>>poz>>x;
            update(poz, x);
        } else if ( op == 1 ){
                    f>>x>>y;
                    g<<query(y)-query(x-1)<<"\n";
                } else {
                    f>>x;
                    g<<query2(x)<<"\n";
                }
    }
    return 0;
}