Cod sursa(job #1160994)

Utilizator BologaDragosBologa Dragos BologaDragos Data 30 martie 2014 22:31:39
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>

using namespace std;

ifstream f("cautbin.in") ;
ofstream g("cautbin.out") ;

int v[100001],k,n ;

int cautare0(int k)
{
    int p,u,i,mij ;
    p=1 ;
    u=n ;
    while(p<=u)
    {
        mij=p+(u-p)/2 ;
        if(v[mij]<=k)
            p=mij+1 ;
        else
            u=mij-1 ;
    }
    mij=p+(u-p)/2 ;
    if(v[mij]>k)
        mij-- ;
    if(v[mij]==k)
        return mij ;
    return -1 ;

}

int cautare1(int k)
{
    int p,u,i,mij ;
    p=1 ;
    u=n ;
    while(p<u)
    {
        mij=p+(u-p)/2 ;
        if(v[mij]<=k)
            p=mij+1 ;
        else
            u=mij ;
    }
    mij=p+(u-p)/2 ;
    if(v[mij]>k)
        mij-- ;
    return mij ;
}

int cautare2(int k)
{
    int p,u,i,mij ;
    p=1 ;
    u=n ;
    while(p<u)
    {
        mij=p+(u-p)/2 ;
        if(v[mij]<k)
            p=mij+1 ;
        else
            u=mij ;
    }
    mij=p+(u-p)/2 ;
    if(v[mij]<k)
        mij++ ;
    return mij ;
}

int main()
{
    int i,a,m ;
    f>>n ;
    for(i=1;i<=n;i++)
        f>>v[i] ;
    f>>m ;
    for(i=1;i<=m;i++)
    {
        f>>a>>k ;
        if(a==0)
            g<<cautare0(k)<<"\n" ;
        if(a==1)
            g<<cautare1(k)<<"\n" ;
        if(a==2)
            g<<cautare2(k)<<"\n" ;
    }
    return 0;
}