Cod sursa(job #1329145)

Utilizator openbvehuKovacs Tamas openbvehu Data 29 ianuarie 2015 08:55:03
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,x[100005],m,a,b,i,pos;
int nulla(int keres)
{
    int bal=1;
    int jobb=n;
    int kozep=(jobb+bal)/2;
    while(jobb!=bal)
    {
        if(x[kozep]==keres)
        return kozep;
        if(x[kozep]<keres)
        {
            bal=kozep;
            kozep=(jobb+bal)/2;
        }
        if(x[kozep]>keres)
        {
            jobb=kozep;
            kozep=(jobb+bal)/2;
        }
    }
    if(x[kozep]==keres)
        return kozep;
    else return -1;
}
int egy(int keres)
{
    int bal=1;
    int jobb=n;
    int kozep=(jobb+bal)/2;
    while(jobb!=bal)
    {
        if(x[kozep]==keres)
        return kozep;
        if(x[kozep]<keres)
        {
            bal=kozep;
            kozep=(jobb+bal)/2;
        }
        if(x[kozep]>keres)
        {
            jobb=kozep;
            kozep=(jobb+bal)/2;
        }
    }
    return kozep;
}
int ketto(int keres)
{
    int bal=1;
    int jobb=n;
    int kozep=(jobb+bal)/2;
    while(jobb!=bal)
    {
        if(x[kozep]==keres)
        return kozep;
        if(x[kozep]<keres)
        {
            bal=kozep;
            kozep=(jobb+bal)/2;
        }
        if(x[kozep]>keres)
        {
            jobb=kozep;
            kozep=(jobb+bal)/2;
        }
    }
    return kozep;
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
        f>>x[i];
    f>>m;
    for(i=1;i<=m;i++)
    {
        f>>a>>b;
        if(a==0)
        {
            pos=nulla(b);
            while(x[pos]==x[pos+1])
                pos++;
        }
        if(a==1)
        {
            pos=egy(b);
            while(b>=x[pos+1])
                pos++;
            while(b<x[pos-1])
                pos--;
        }
        if(a==2)
        {
            pos=ketto(b);
            while(b>x[pos+1])
                pos++;
            while(b<=x[pos-1])
                pos--;
        }
        g<<pos<<"\n";
    }
}