Cod sursa(job #1794262)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 1 noiembrie 2016 09:26:27
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <cmath>

#define ub(n) (n & (-n))

using namespace std;

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

int N, M, c, x, j, a, b;
int AIB[100003];

int add(int poz, int val) {
    for(int i = poz; i <= N; i += ub(i)) AIB[i] += val;
    return 0;
}
int sum(int poz) {
    int sum = 0;
    for(int i = poz; i >= 1; i -= ub(i)) sum += AIB[i];
    return sum;
}

int main()
{
    f >> N >> M;
    for(int i = 1; i <= N; i++)
        f >> x, add(i, x);
    for(int i = 1; i <= M; i++) {
        f >> c;
        if(c == 0) {
            f >> j >> x;
        add(j, x);}
        else if(c == 2) {
            f >> x, j = 1;
            while(sum(j) < x) j++;
            g << j << "\n";
        }
        else if (c == 1) f >> a >> b, g << abs(sum(a-1) - sum(b)) << "\n";
    }
    return 0;
}