Cod sursa(job #902022)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 1 martie 2013 12:35:06
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,i,v[10001],m,x,y,s,d,mij;

int caut0(int x)
{
    s=1;
    d=n;
    mij=(s+d)/2;
    while (s<=d)
    {
        if (v[mij]<=x)
            s=mij+1;
        else d=mij-1;
        mij=(s+d)/2;
    }
    if (v[mij]>x) mij--;;
    if (v[mij]==x) return mij;
    else return -1;
}

int caut1(int x)
{
    s=1;
    d=n;
    mij=(s+d)/2;
    while (s<=d)
    {
        if (v[mij]<=x)
            s=mij+1;
        else d=mij-1;
        mij=(s+d)/2;
    }
    if (v[mij]>x) mij--;
    return mij;
}

int caut2(int x)
{
    s=1;
    d=n;
    mij=(s+d)/2;
    while (s<=d)
    {
        if (v[mij]>=x) d=mij-1;
        else s=mij+1;
        mij=(s+d)/2;
    }
    if (v[mij]<x) mij++;
    return mij;
}

int main()
{
    f>>n;
    for (i=1;i<=n;i++)
    {
        f>>v[i];
    }
    f>>m;
    for (i=1;i<=m;i++)
    {
        f>>y>>x;
        if (y==0) g<<caut0(x)<<'\n';
        if (y==1) g<<caut1(x)<<'\n';
        if (y==2) g<<caut2(x)<<'\n';
    }
    f.close();
    g.close();
    return 0;
}