Cod sursa(job #1553097)

Utilizator mircearoataMircea Roata Palade mircearoata Data 19 decembrie 2015 11:44:19
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include<iostream>
#include<fstream>
using namespace std;
int n,x,y,v[100001],m,a;

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

void caut0 (int s, int d)
{
    if(s>d)
        out<<"-1"<<'\n';
    else
        {
            m =(s+d)/2;
            if (x==v[m] && v[m+1]>v[m]){
                out<<m+1<<'\n';
            }
            if (x<v[m])
                caut0(s,m-1);
            if (x>v[m] || v[m+1]<=v[m])
                caut0(m+1,d);
        }
}
void caut1 (int s, int d)
{
    if(s>d){
        out<<"-1"<<'\n';
    }
    else
        {
            m =(s+d)/2;
            if (x>=v[m] && v[m+1]>v[m]){
                out<<m+1<<'\n';
            }
            if (x<v[m])
                return caut1(s,m-1);
            if (x>v[m] || v[m+1]<=v[m])
                return caut1(m+1,d);
        }
}
void caut2 (int s, int d)
{
    if(s>d){
        out<<"-1"<<'\n';
    }
    else
        {
            m =(s+d)/2;
            if (x<=v[m] && v[m]>v[m-1]){
                out<<m+1<<'\n';
            }
            if (x<v[m] || v[m]<=v[m-1])
                return caut2(s,m-1);
            if (x>v[m])
                return caut2(m+1,d);
        }
}

int main()
{
    in>>n;
    for (int i=0;i<n;i++)  //Vectorul incepe de pe pozitia 0 pana la n-1
        in>>v[i];
    in>>a;
    for(int i = 1;i<=a;i++){
        in>>y>>x;
        if(y==0){
            caut0 (0,n-1);
        }
        if(y==1){
            caut1 (0,n-1);
        }
        if(y==2){
            caut2 (0,n-1);
        }
    }
    return 0;
}