Cod sursa(job #2051801)

Utilizator TherevengerkingSurani Adrian Therevengerking Data 29 octombrie 2017 16:08:33
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int Nmax = 100000 + 5;
int n, m, p, sol = -1, st, dr;
int a[Nmax];
int main()
{
    fin >> n;
    for(int i = 1; i <= n; ++i)fin >> a[i];
    fin >> m;
    for(int i = 1, x; i <= m; ++i)
    {
        fin >> p >> x;
        st = 1; dr = n; sol = -1;
        if(p == 0)
        {
            while(st <= dr)
            {
                int mid = st + (dr - st)/2;

                if(a[mid] < x)st = mid + 1;
                else if(a[mid] > x)dr = mid -1;
                else sol = mid, st = mid + 1;
            }
        }
        else if(p == 1)
        {
            while(st <= dr)
            {
                int mid = st + (dr - st)/2;

                if(a[mid] <= x)st = mid + 1, sol = mid;
                else if(a[mid] > x)dr = mid - 1;
            }
        }
        else
        {
            while(st <= dr)
            {
                int mid = st + (dr - st)/2;

                if(a[mid] < x)st = mid + 1;
                else if(a[mid] >= x)dr = mid - 1, sol = mid;
            }
        }
        fout << sol << '\n';
    }
    return 0;
}