Cod sursa(job #2497962)

Utilizator MCnitzzNita Sebastian MCnitzz Data 23 noiembrie 2019 12:51:12
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>
#define Nmax 10000


using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int  A[Nmax];
int bisort0(int inc, int sf,int k)
{
    int mid=(inc+sf)/2;
    while(inc<=sf||A[mid]!=k)
    {
        mid=(inc+sf)/2;
        if(A[mid]>k)
        {
            sf=mid-1;
        }else{inc=mid+1;}

    }
    if(A[mid]!=k){return -1;}else { while(A[mid+1]==k)mid++; return mid;}



}
int bisort1(int inc, int sf, int k)
{
     int mid=(inc+sf)/2;
    while(inc<=sf||A[mid]!=k)
    {
        mid=(inc+sf)/2;
        if(A[mid]>k)
        {
            sf=mid-1;
        }else{inc=mid+1;}

    }
    if(A[mid]!=k){return -1;}else { while(A[mid+1]<=k)mid++; return mid;}
}
int bisort2(int inc, int sf,int k)
{
     int mid=(inc+sf)/2;
    while(inc<=sf||A[mid]!=k)
    {
        mid=(inc+sf)/2;
        if(A[mid]>k)
        {
            sf=mid-1;
        }else{inc=mid+1;}

    }
    if(A[mid]!=k){return -1;}else { while(A[mid-1]>=k)mid--; return mid;}

}

int main()
{
    int i,k,caz,N,M;
    in>>N;
    for(i=1;i<=N;i++)
        {in>>A[i];}
    in>>M;
    while(M!=0)
    {
        M--;
        in>>caz>>k;
        if(caz==0)out<<bisort0(1, N, k)<<"\n";
        if(caz==1)out<<bisort1(1, N, k)<<"\n";
        if(caz==2)out<<bisort2(1, N, k)<<"\n";

    }
    return 0;
}