Cod sursa(job #2620642)

Utilizator anamaria2602Avram Ana Maria anamaria2602 Data 29 mai 2020 13:05:10
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define Maxx 100001

using namespace std;

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

int N,L,A[Maxx];
int M,x,y,poz,OK,st,dr,mij;
int CB0(int A[],int &N,int y)
{
    int st = 1, dr = N, mij;
    while ( st<=dr )
    {
        mij = (st+dr)/2;
        if ( y == A[mij] )
            return mij;
        else if ( y<A[mij] )
            dr = mij-1;
        else if ( y>A[mij] )
            st = mij+1;
    }
    return -1;
}
int CB1(int A[],int &N,int y)
{
    int st = 1, dr = N, mij;
    while ( st<=dr )
    {
        mij = (st+dr)/2;
        if ( y<A[mij] )
            dr = mij-1;
        else
            st = mij+1;
    }
    return dr;
}
int CB2(int A[],int &N,int y)
{
    int st = 1, dr = N, mij;
    while ( st<=dr )
    {
        mij = (st+dr)/2;
        if ( y <=A[mij] )
            dr = mij-1;
        else
            st = mij+1;
    }
    return st;
}


int main()
{
    f >> N;
    for(int i=1; i<=N; i++)
        f >> A[i];
    f >> M;
    for(int i=1; i<=M; i++)
    {
        f >> x >> y;
        if ( x==0 )
        {
            int poz = CB0(A,N,y);
            if ( A[poz]==y )
                if ( A[poz]==A[poz+1] )
                    poz++;
            g << poz << endl;
        }
        else if ( x==1 )
        {
            int poz = CB1(A,N,y);
            g << poz << endl;
        }
        else
        {
            int poz = CB2(A,N,y);
            g << poz << endl;
        }

    }
    return 0;
}