Cod sursa(job #1800287)

Utilizator catalinaioanaObreja Ioana Catalina catalinaioana Data 7 noiembrie 2016 17:26:08
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.93 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n;
void cautbin(int s,int d,int x,int v[100001])
{
    int mij;
    if(s>d)
        g<<"-1";
    else
    {
        mij=(s+d)/2;
        if(x>v[mij])
            cautbin(mij+1,d,x,v);
        else
            if(x<v[mij])
                cautbin(s,mij-1,x,v);
        else
            if(x==v[mij]&&v[mij+1]!=x)
                g<<mij;
        else
            if(x==v[mij]&&v[mij+1]==x)
                cautbin(mij+1,d,x,v);
    }
}
void cautbin2(int s,int d,int x,int v[100001])
{
    int mij;
    if(s>d)
        cautbin2(1,n,x-1,v);
    else
    {
        mij=(s+d)/2;
        if(x>v[mij])
            cautbin2(mij+1,d,x,v);
        else
            if(x<v[mij])
                cautbin2(s,mij-1,x,v);
        else
            if(x==v[mij]&&v[mij+1]!=x)
                g<<mij;
        else
            if(x==v[mij]&&v[mij+1]==x)
                cautbin2(mij+1,d,x,v);
    }
}
void cautbin3(int s,int d,int x,int v[100001])
{
    int mij;
    if(s>d)
        cautbin3(1,n,x+1,v);
    else
    {
        mij=(s+d)/2;
        if(v[mij]>x)
            cautbin3(s,mij-1,x,v);
        else
            if(v[mij]<x)
                cautbin3(mij+1,d,x,v);
        else
            if(x==v[mij]&&v[mij-1]!=x)
                g<<mij;
        else
            cautbin3(s,mij-1,x,v);
    }
}
int main()
{
    int i,v[100001],c[100001],m;
    f>>n;
    for(i=1;i<=n;i++)
        f>>v[i];
    f>>m;
    for(i=1;i<=m*2;i=i+2)
        f>>c[i]>>c[i+1];
    for(i=1;i<=m*2;i=i+2)
    {
        if(c[i]==0)
        {
            cautbin(1,n,c[i+1],v);
            g<<'\n';
        }
        if(c[i]==1)
        {
            cautbin2(1,n,c[i+1],v);
            g<<'\n';
        }
        if(c[i]==2)
        {
            cautbin3(1,n,c[i+1],v);
            g<<'\n';
        }
    }
    return 0;
}