Cod sursa(job #1128495)

Utilizator ignadariusIgna Darius ignadarius Data 27 februarie 2014 17:21:11
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>

using namespace std;

int n,t,k,x,v[100005];
int caut0(int x)
{
    int st=1;
    int dr=n;
    int mij=(dr+st)/2;
    int sol=-1;
    while(st<=dr)
    {
        if(v[mij]==x){sol=mij;st=mij+1;}if(v[mij]<x)dr=mij-1;else st=mij+1;
        mij=(st+dr)/2;
    }
    return sol;
}
int caut1(int x)
{
    int st=1;
    int dr=n;
    int mij=(st+dr)/2;
    int sol=-1;;
    while(st<=dr)
    {
        if(v[mij]<=x){sol=mij;st=mij+1;}
            else dr=mij-1;
        mij=(st+dr)/2;
    }
    return sol;
}
int caut2(int x)
{
    int st=1;
    int dr=n;
    int sol=-1;
    int mij=(st+dr)/2;
    while(st<=dr)
    {
        if(v[mij]>=x){sol=mij;dr=mij-1;}
            else st=mij+1;
        mij=(st+dr)/2;
    }
    return sol;
}
int main()
{
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    for(int i=1; i<=n; i++)
        f>>v[i];
    f>>t;
    for(int i=1; i<=t; i++)
    {
        f>>k>>x;
        if(k==0)g<<caut0(x)<<"\n";
        if(k==1)g<<caut1(x)<<"\n";
        if(k==2)g<<caut2(x)<<"\n";
    }
    return 0;
}