Cod sursa(job #2702366)

Utilizator oanadagreatOana-Maria Topan oanadagreat Data 3 februarie 2021 19:43:38
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>

using namespace std;

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

void citireVector(int &n,int v[])
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
}


int CautareBinara1(int st,int dr,int v[],int elem)
{
    if (st+1>=dr){
        return st;
    }
    else {
        int m=(st+dr)/2;
        if (elem<v[m])
            return CautareBinara1(st,m,v,elem);
        else
            return CautareBinara1(m,dr,v,elem);
    }
}

int verif(int elem,int n,int v[])
{
    int m = CautareBinara1(0,n+1,v,elem);
    if (v[m]==elem)
        return m;
    else return -1;
}

int CautareBinara2(int st,int dr,int v[],int elem)
{
    if (st+1>=dr){
        return dr;
    }
    else {
        int m=(st+dr)/2;
        if (elem<=v[m])
            return CautareBinara2(st,m,v,elem);
        else
            return CautareBinara2(m,dr,v,elem);
    }
}

void rezolvare(int n,int v[])
{
    int intrebari,tip,elem;
    f>>intrebari;
    for(int i=1;i<=intrebari;i++)
    {
        f>>tip>>elem;
        if (tip==0)
            g<<verif(elem,n,v);
        if(tip==1)
            g<<CautareBinara1(0,n+1,v,elem);
        if(tip==2)
            g<<CautareBinara2(0,n+1,v,elem);
        g<<'\n';
    }
}



int main()
{
    int n,v[100001];
    citireVector(n,v);
    rezolvare(n,v);
    return 0;
}