Cod sursa(job #1484260)

Utilizator raducostacheRadu Costache raducostache Data 10 septembrie 2015 17:37:13
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <fstream>
using namespace std;
ofstream fout("cautbin.out");
void solve0();
void solve1();
void solve2();
int n,nc,i,c,x,v[100001];
int main()
{
    freopen("cautbin.in","r",stdin);
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",&v[i]);
    scanf("%d",&nc);
    for(i=1;i<=nc;++i)
    {
        scanf("%d %d",&c,&x);
        if(c==0)
            solve0();
        else if(c==1) solve1();
        else solve2();
    }
    return 0;
}
void solve0()
{
    int m,st,dr;
    st=1;
    dr=n;
    while(st<=dr)
    {
        m=(st+dr)/2;
        if(x<v[m]) dr=m-1;
        else st=m+1;
    }
    if(v[dr]==x)  fout<<dr<<'\n';
    else fout<<-1<<'\n';
}
void solve1()
{
    int m,st,dr;
    st=1;
    dr=n;
    while(st<=dr)
    {
        m=(st+dr)/2;
        if(x<v[m]) dr=m-1;
        else st=m+1;
    }
    if(v[dr]<=x)  fout<<dr<<'\n';
}
void solve2()
{
    int m,st,dr;
    st=1;
    dr=n;
    while(st<=dr)
    {
        m=(st+dr)/2;
        if(x<=v[m]) dr=m-1;
        else st=m+1;
    }
    fout<<st<<'\n';
}