Cod sursa(job #2219505)

Utilizator AlexnolifeAlexandru Ica Alexnolife Data 9 iulie 2018 09:43:47
Problema Arbori indexati binar Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <array>
#include <cstddef>

constexpr int NMAX = 100000;

std::array<int, NMAX> v;
std::size_t arraySize{0};

std::ofstream g{"aib.out"};

enum QueryType : int
{
    ADD = 0,
    SUM = 1, 
    POSITION = 2
};

void Read()
{
    std::ifstream f{"aib.in"};
    std::ios_base::sync_with_stdio(false);

    std::size_t numOfQuerries{0};
    int operation{ -1 }, i;

    f >> arraySize >> numOfQuerries;

    for(i = 0; i < arraySize; ++i) {
        f >> v[i];

        if(i != 0) {
            v[i] += v[i - 1];
        }
    }

    for(i = 0; i < numOfQuerries; ++i) {
        f >> operation;

        switch(operation)
        {
            case ADD:
            {
                int a, b;

                f >> a >> b;

                for(int j = a - 1; j < arraySize; ++j) {
                    v[j] += b;
                }

                break;
            }
            case SUM:
            {
                int a, b;

                f >> a >> b;

                g << ((a == 1) ? v[b - 1] : (v[b - 1] - v[a - 2])) << '\n';
                
                break;
            }
            case POSITION:
            {
                int a, j;

                f >> a;

                for(j = 0; v[j] != a && j < arraySize; ++j) {}
               
                g << ((j == arraySize) ? -1 : (j + 1)) << '\n';

                break;
            }
        }
    }
}

//void Solve()
//{
//}

int main()
{
    Read();
  //  Solve();
}