Cod sursa(job #1553093)

Utilizator mircearoataMircea Roata Palade mircearoata Data 19 decembrie 2015 11:40:43
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include<iostream>
#include<fstream>
using namespace std;
int n,x,y,v[100001],m,a;
int caut0 (int s, int d)
{
    if(s>d)
        return -1;
    else
        {
            m =(s+d)/2;
            if (x==v[m] && v[m+1]>v[m]){
                return m+1;
            }
            if (x<v[m])
                return caut0(s,m-1);
            if (x>v[m] || v[m+1]<=v[m])
                return caut0(m+1,d);
        }
}
int caut1 (int s, int d)
{
    if(s>d){
        return -1;
    }
    else
        {
            m =(s+d)/2;
            if (x>=v[m] && v[m+1]>v[m]){
                return m+1;
            }
            if (x<v[m])
                return caut1(s,m-1);
            if (x>v[m] || v[m+1]<=v[m])
                return caut1(m+1,d);
        }
}
int caut2 (int s, int d)
{
    if(s>d){
        return -1;
    }
    else
        {
            m =(s+d)/2;
            if (x<=v[m] && v[m]>v[m-1]){
                return m+1;
            }
            if (x<v[m] || v[m]<=v[m-1])
                return caut2(s,m-1);
            if (x>v[m])
                return caut2(m+1,d);
        }
}

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

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){
            out<<caut0 (0,n-1)<<'\n';
        }
        if(y==1){
            out<<caut1 (0,n-1)<<'\n';
        }
        if(y==2){
            out<<caut2 (0,n-1)<<'\n';
        }
    }
    return 0;
}