Cod sursa(job #1576427)

Utilizator cordun_cristinaCristina Maria Cordun cordun_cristina Data 22 ianuarie 2016 14:14:34
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

const int NMax = 100005;

int n, m, a[NMax], x, job;

void Exist(int s, int d)
{
    int m;
    while(s < d)
    {
        m = (s+d)/2;
        if(a[m] > x) d = m-1;
        else s = m+1;
    }
    m = (s+d)/2;
    if(a[m] != x) m--;
    if(a[m] == x) g<<m<<'\n';
    else g<<-1<<'\n';
}

void Small(int s, int d)
{
    int m;
    while(s < d)
    {
        m = (s+d)/2;
        if(a[m] > x) d = m-1;
        else s = m+1;
    }
    m = (s+d)/2;
    if(a[m] > x) m--;
    g<<m<<'\n';
}

void Big(int s, int d)
{
    int m;
    while(s < d)
    {
        m = (s+d)/2;
        if(x <= a[m]) d = m-1;
        else s = m+1;
    }
    m = (s+d)/2;
    if(a[m] < x) m++;
    g<<m<<'\n';
}

void Solve()
{
    while(m--)
    {
        f>>job>>x;
        if(job == 0) Exist(1,n);
        if(job == 1) Small(1,n);
        if(job == 2) Big(1,n);
    }
}

void Read()
{
    f>>n;
    for(int i = 1; i <= n; i++) f>>a[i];
    f>>m;
}

int main()
{
    Read();
    Solve();
    return 0;
}