Cod sursa(job #1607077)

Utilizator razvandRazvan Dumitru razvand Data 20 februarie 2016 20:05:59
Problema Arbori indexati binar Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("aib.in");
ofstream out("aib.out");

int aib[100003];
int n,m;

void add(int poz, int a) {
    for(int i = poz; i < n; i++)
        aib[i] += a;
}

int bin(int st, int dr, int a) {

    int mij = (st+dr)/2;

    if(st > dr)
        return -2;

    if(aib[mij] < a)
        return bin(mij+1, dr, a);
    else if(aib[mij] > a)
        return bin(st, mij-1, a);
    return mij;

}

int main() {
    in >> n >> m;
    for(int i = 0; i < n; i++)
        in >> aib[i];
    for(int i = 1; i < n; i++)
        aib[i] += aib[i-1];
    int t,a,b;
    for(int i = 0; i < m; i++) {

        in >> t;

        if(t == 0) {
            in >> a >> b;
            add(a-1,b);
        } else if(t == 1) {
            in >> a >> b;
            out << aib[b-1]-aib[a-2] << '\n';
        } else if(t == 2) {
            in >> a;
            out << bin(0, n-1, a)+1 << '\n';
        }

    }

    return 0;
}