Cod sursa(job #2620611)

Utilizator anamaria2602Avram Ana Maria anamaria2602 Data 29 mai 2020 12:03:24
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.26 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define Maxx 1001

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 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 )
        {
            poz = -1;
            OK = 0;
            st = 1;
            dr = N;
            while ( st<=dr )
            {
                mij = (st+dr)/2;
                if ( y == A[mij] )
                {
                    poz = mij;
                    OK=1;
                    break;
                }
                else if ( y<A[mij] )
                    dr = mij-1;
                else if ( y>A[mij] )
                    st = mij+1;
            }
            while( A[poz+1]==A[poz] )
                poz++;
            if(OK==1)
                g << poz << endl;
            else
                g << "-1" << endl;
        }
        else if ( x==1 )
        {
            poz = 0;
            OK = 0;
            st = 1;
            dr = N;
            while ( st<=dr )
            {
                mij = (st+dr)/2;
                if ( y == A[mij] )
                {
                    poz = mij;
                    break;
                }
                else if ( y<A[mij] )
                    dr = mij-1;
                else if ( y>A[mij] )
                    st = mij+1;
                poz = st;
            }

            if ( A[poz]!=y )
                poz--;
            g << poz << endl;
        }
        else
        {
            poz = 0;
            OK = 0;
            st = 1;
            dr = N;
            while ( st<=dr )
            {
                mij = (st+dr)/2;
                if ( y == A[mij] )
                {
                    poz = mij;
                    break;
                }
                else if ( y<A[mij] )
                    dr = mij-1;
                else if ( y>A[mij] )
                    st = mij+1;
                poz = st;
            }
            while ( A[poz]==A[poz-1] )
                poz--;
            g << poz << endl;
        }

    }
    return 0;
}