Cod sursa(job #2622696)

Utilizator miramaria27Stroie Mira miramaria27 Data 1 iunie 2020 18:05:55
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int found(int i,int j,int a[],int x,int n)
{

    int m=i+(j-i)/2;
    if((a[m]==x && m==n-1) || (m+1<n && a[m+1]>x))
        return m;
    if(a[m]<=x)
        found(m+1,j,a,x,n);
    else found(i,m,a,x,n);
}
int found1(int i, int j, int a[], int x, int n)
{

    int m=i+(j-i)/2;
    if(a[m]<=x && (m==n-1 || (m+1<n && a[m+1]>x)))
       return m;
    if(a[m]<=x)
        found1(m+1,j,a,x,n);
      else found1(i,m,a,x,n);

}
int found2(int i, int j, int a[], int x, int n)
{

    int m=i+(j-i)/2;
    if(a[m]>=x && (m==0 || (m-1>=0 && a[m-1]<x)))
       return m;
    if(x>a[m])
         found2(m+1,j,a,x,n); ///jumatatea mare
      else found2(i,m,a,x,n); ///jumatatea mica

}
int main()
{
    int a[100000];
    int n;
    in>>n;
    for(int i=0;i<n;i++)in>>a[i];
    int nr;
    in>>nr;
    for(int i=0;i<nr;i++)
    {
        int opt,searched;
        in>>opt>>searched;
        switch(opt)
        {
        case 0:
            {
                out<<found(0,n-1,a,searched,n)+1<<"\n";
                break;
            }
        case 1:
            {
                out<<found1(0,n-1,a,searched,n)+1<<"\n";
                break;
            }
        case 2:
            {
                out<<found2(0,n-1,a,searched,n)+1<<"\n";
                break;
            }
        }
    }
    return 0;
}