Cod sursa(job #2396811)

Utilizator ezioconnorVlad - Gabriel Iftimescu ezioconnor Data 3 aprilie 2019 20:38:39
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>

using namespace std;

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

int AIB[100001], n, m;

inline int zeros(int x)
{
    return x & (-x);
}

inline void add(int poz, int c)
{
    for (int i = poz; i <= n; i += zeros(i))
        AIB[i] += c;
}

inline int compute(int poz)
{
    int rez = 0;
    for (int i = poz; i > 0; i -= zeros(i))
        rez += AIB[i];
    return rez;
}

int main()
{
    int c, a, b;
    in >> n >> m;
    for (int i = 1; i <= n; ++i)
    {
        in >> c;
        add(i, c);
    }
    for (int q = 1; q <= m; ++q)
    {
        in >> c;
        if (c != 2)
        {
            in >> a >> b;
            if (c == 0)
                add(a, b);
            else if (c == 1)
                out << compute(b) - compute(a - 1) << '\n';
        }
        else
        {
            in >> a;
            int i = 1;
            while (compute(i) < a)
                ++i;
            out << i << '\n';
        }
    }
    return 0;
}