Cod sursa(job #1945873)

Utilizator nicu_serteSerte Nicu nicu_serte Data 29 martie 2017 18:46:18
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, v[100005], m;
void citire()
{
    int i;
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>v[i];
    fin>>m;
}
void solve0(int val)
{
    int m, st, dr;
    st=1; dr=n;
    while(st<=dr)
    {
        m=(st+dr)/2;
        if(v[m]<=val)
            st=m+1;
        else dr=m-1;
    }
    m=(st+dr)/2;
    if(v[m]>val)
        m--;
    if(v[m]==val)
        fout<<m<<'\n';
    else fout<<-1<<'\n';
}
void solve1(int val)
{
    int m, st, dr;
    st=1; dr=n;
    while(st<dr)
    {
        m=(st+dr)/2;
        if(v[m]<=val)
            st=m+1;
        else dr=m;
    }
    m=(st+dr)/2;
    if(v[m]>val)
        m--;
    fout<<m<<'\n';
}
void solve2(int val)
{
    int m, st, dr;
    st=1; dr=n;
    while(st<dr)
    {
        m=(st+dr)/2;
        if(v[m]<val)
            st=m+1;
        else dr=m;
    }
    m=(st+dr)/2;
    if(v[m]<val)
        m++;
    fout<<m<<'\n';
}
int main()
{
    int op, x;
    citire();
    while(m)
    {
        m--;
        fin>>op>>x;
        if(op==0)
            solve0(x);
        else if(op==1)
            solve1(x);
        else if(op==2)
            solve2(x);
    }
    fout<<'\n';
    fin.close();
    fout.close();
    return 0;
}