Cod sursa(job #3130632)

Utilizator Traian_7109Traian Mihai Danciu Traian_7109 Data 18 mai 2023 10:46:16
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.65 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

const int NMAX = 1e5;
int v[NMAX+5], n;

class query {
    private:
        short task;
        int x, solution;

        void task1()
        {
            int left = 1, right = n;
            solution = -1;

            while (left <= right) {
                int middle = (left+right)/2;

                if (v[middle] < x) left = middle+1;
                else if (v[middle] > x) right = middle-1;
                else solution = middle, left = middle+1;
            }
        }

        void task2()
        {
            int left = 1, right = n;

            while (left <= right) {
                int middle = (left+right)/2;

                if (v[middle] <= x) solution = middle, left = middle+1;
                else right = middle-1;
            }
        }

        void task3()
        {
            int left = 1, right = n;

            while (left <= right) {
                int middle = (left+right)/2;

                if (v[middle] >= x) solution = middle, right = middle-1;
                else left = middle+1;
            }
        }

    public:
        void read()
        {
            fin>>task>>x;
        }

        void solve()
        {
            task++;
            
            if (task == 1) task1();
            if (task == 2) task2();
            if (task == 3) task3();
        }

        void print()
        {
            fout<<solution<<'\n';
        }
};

int main()
{
    int m;
    query q;
    fin>>n;

    for (int i = 1; i <= n; i++) fin>>v[i];

    fin>>m;

    while (m--) q.read(), q.solve(), q.print();

    return 0;
}