Cod sursa(job #2396812)

Utilizator ezioconnorVlad - Gabriel Iftimescu ezioconnor Data 3 aprilie 2019 20:42:37
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 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;
}

inline int sum(int x)
{
    int lg = 1, i;
    for (lg; lg <= n; lg <<= 1)
    {
        for (i = 1; lg; lg >>= 1)
        {
            if (i + lg <= n && compute(i + lg) <= x)
                i += lg;
        }
    }
    if (compute(i) != x)
        return -1;
    return i;
}

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;
}