Cod sursa(job #2282003)

Utilizator SavanderianAlexandru Balan Savanderian Data 13 noiembrie 2018 01:24:20
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.93 kb
#include <iostream>
#include<fstream>

using namespace std;

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

int pozitie;

int cautbin( int inc,  int sf, int v[], int b)
{
     int mij=(inc+sf)/2;
    if(b==v[mij])
        return mij;
    else
        if(b>v[mij])
            return cautbin(mij+1,sf,v,b);
            return cautbin(inc,mij,v,b);
}

int cautbin1( int inc,  int sf, int v[], int b)
{
     int mij=(inc+sf)/2;
     if(b==v[mij+1])
        return cautbin1(mij+1,sf,v,b);
    if(b==v[mij])
        return mij;
    else
        if(b>v[mij])
            return cautbin1(mij+1,sf,v,b);
            return cautbin1(inc,mij,v,b);
}
int cautbin2( int inc,  int sf, int v[], int b)
{
     int mij=(inc+sf)/2;
     if(b==v[mij-1])
        return cautbin1(inc,mij-1,v,b);
    if(b==v[mij])
        return mij;
    else
        if(b>v[mij])
            return cautbin1(mij+1,sf,v,b);
            return cautbin1(inc,mij,v,b);
}
int main()
{
     int v[100000],i,j,n,mij,m;

    f>>n;
    for(int i=0;i<n;i++)
        f>>v[i];

    f>>m;
    for(int i=0;i<m;i++)
    {
        int a,b;
        f>>a>>b;
            if(a==0)
                {
                pozitie=cautbin(0,n-1,v,b);
                while(v[pozitie]==b&&pozitie<n)
                    pozitie++;
                        g<<pozitie-1<<'\n';

                }
                else if (a==1)
                {
                    pozitie=cautbin1(0,n-1,v,b);
                    while(v[pozitie]<=b&&pozitie<n)
                    pozitie++;
                    pozitie--;
                    g<<pozitie<<'\n';
                }
                else
                {
                    pozitie=cautbin2(0,n-1,v,b);
                    while(v[pozitie]>=b&&pozitie>=0)
                    pozitie--;
                    pozitie++;
                    g<<pozitie<<'\n';
                }


    }


    return 0;
}