Cod sursa(job #1826728)

Utilizator Dupree7FMI Ciobanu Andrei Dupree7 Data 10 decembrie 2016 20:11:18
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.65 kb
#include <fstream>
 
using namespace std;
 
ifstream f("cautbin.in");
ofstream g("cautbin.out");
 
int n, v[100002];
 
int CautBin0(int x)
{
    int lo = 1, hi = n, mid;
 
    while(lo <= hi)
    {
        mid = lo + (hi - lo) / 2;
        if(x > v[mid])
            lo = mid + 1;
        else if(x < v[mid])
            hi = mid - 1;
        else
        {
            while(v[mid] == v[mid + 1])
                    mid++;
 
            return mid;
        }
    }
 
    return -1;
}
 
int CautBin1(int x)
{
    int lo = 1, hi = n, mid;
 
    while(lo <= hi)
    {
        mid = lo + (hi - lo) / 2;
        if(x > v[mid])
            lo = mid + 1;
        else if(x < v[mid])
            hi = mid - 1;
        else
        {
            while(v[mid] == v[mid + 1])
                    mid++;
 
            return mid;
        }
    }
 
    return hi;
}
 
int CautBin2(int x)
{
    int lo = 1, hi = n, mid;
 
    while(lo <= hi)
    {
        mid = lo + (hi - lo) / 2;
        if(x > v[mid])
            lo = mid + 1;
        else if(x < v[mid])
            hi = mid - 1;
        else
        {
            while(v[mid] == v[mid - 1])
                    mid--;
 
            return mid;
        }
    }
 
    return lo;
}
 
int main()
{
    int i, m, a, b;
 
    f >> n;
    for(i = 1; i < n + 1; i++)
        f >> v[i];
    f >> m;
 
    for(i = 0; i < m; i++)
    {
        f >> a >> b;
 
        if(a == 0)
            g << CautBin0(b) << "\n";
        else if(a == 1)
            g << CautBin1(b) << "\n";
        else
            g << CautBin2(b) << "\n";
    }
 
    return 0;
}