Cod sursa(job #2623509)

Utilizator YesterdayIlie George Ciprian Yesterday Data 3 iunie 2020 12:29:52
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream out("cautbin.out");
int v[10001],x,y,n,m;
int caut(int s,int d,int x)
{
    if(s>d)
        return -1;
    else
    {
        int m=(s+d)/2;
        if(x==v[m] && v[m+1]!=x)
            return m;
        if(x < v[m])
            return caut(s,m-1,x);
        if(x> v[m] || v[m+1]==x)
            return caut(m+1,d,x);
    }
}
int caut2(int s,int d,int x)
{
    int m;
    while(s<d)
    {
        m=(s+d)/2;
        if(v[m]<=x)
            s=m+1;
        else d=m;
    }
    m=(s+d)/2;
    if(v[m]>x)
        m=m-1;
    return m;
}
int caut3(int s,int d,int x)
{
    int m;
    while (s<d)
    {
        m=(s+d)/2;
        if(v[m]<x)
            s=m+1;
        else d=m;
    }
    m=(s+d)/2;
    if(v[m]<x)
        m=m+1;
    return m;
}
int main()
{
   f>>n;
   for(int i=1;i<=n;i++)
    f>>v[i];
    f>>m;
    for(int i=1;i<=m;i++)
    {
        f>>y>>x;
        if(y==1)
        {
        out<<caut2(1,n,x);


        }
        if(y==2)
        {
        out<<caut3(1,n,x);


        }
        if(y==0)
        {
            out<<caut(1,n,x);

        }
    }
    return 0;
}