Cod sursa(job #1937206)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 23 martie 2017 19:51:11
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
using namespace std;

class InputReader
{
public:
    InputReader() {}
    InputReader(const char *file_name)
    {
        input_file = fopen(file_name, "r");
        cursor = 0;
        fread(buffer, SIZE, 1, input_file);
    }
    inline InputReader &operator >>(int &n)
    {
        while(buffer[cursor] < '0' || buffer[cursor] > '9')
        {
            advance();
        }
        n = 0;
        while('0' <= buffer[cursor] && buffer[cursor] <= '9')
        {
            n = n * 10 + buffer[cursor] - '0';
            advance();
        }
        return *this;
    }
private:
    FILE *input_file;
    static const int SIZE = 1 << 17;
    int cursor;
    char buffer[SIZE];
    inline void advance()
    {
        ++ cursor;
        if(cursor == SIZE)
        {
            cursor = 0;
            fread(buffer, SIZE, 1, input_file);
        }
    }
};

InputReader f("cautbin.in");
ofstream g("cautbin.out");
int n,m,V[100000];
int main()
{
    f>>n;
    for(auto i=1; i<=n; i++) f>>V[i];

    f>>m;
    for(auto i=1; i<=m; i++)
    {
        int q,x;
        f>>q>>x;

        if (q==0)
            if (binary_search(V+1,V+n+1,x)) g<<upper_bound(V+1,V+n+1,x)-V-1<<"\n";
            else g<<"-1"<<"\n";
        if (q==1) g<<upper_bound(V+1,V+n+1,x)-V-1<<"\n";
        if (q==2) g<<lower_bound(V+1,V+n+1,x)-V<<"\n";

    }

}