Cod sursa(job #874967)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 9 februarie 2013 15:14:07
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.31 kb
#include <fstream>

using namespace std;

int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

    int v[100001];
    int n,m;
    fin>>n;
    int i;
    for(i=0;i<n;i++)
        fin>>v[i];

    fin>>m;
    int numar;
    int tip;
    int cap,coada,mijl;
    int raspuns;
    for(i=0;i<m;i++)
    {
        fin>>tip;
        fin>>numar;

        if(tip==0)
        {
            raspuns=-2;
            cap=0;
            coada=n-1;
            mijl=(n-1)/2;

            while(cap<=coada)
            {
                if(v[mijl]==numar)
                {
                    if(mijl>raspuns)
                    {
                        raspuns=mijl;
                    }

                    cap=mijl+1;
                }
                else if(v[mijl]<numar)
                {
                    cap=mijl+1;
                }
                else
                {
                    coada=mijl-1;
                }
                mijl=(cap+coada)/2;
            }
            fout<<raspuns+1<<'\n';
        }
        else if(tip==1)
        {

            raspuns=0;
            cap=0;
            coada=n-1;
            mijl=(n-1)/2;

            while(cap<=coada)
            {
                if(v[mijl]<=numar)
                {
                    if(mijl>raspuns)
                    {
                        raspuns=mijl;
                    }

                    cap=mijl+1;
                }
                else
                {
                    coada=mijl-1;
                }

                mijl=(cap+coada)/2;
            }
            fout<<raspuns+1<<'\n';
        }
        else
        {


            raspuns=n+1;
            cap=0;
            coada=n-1;
            mijl=(n-1)/2;

            while(cap<=coada)
            {
                if(v[mijl]>=numar)
                {
                    if(mijl<raspuns)
                    {
                        raspuns=mijl;
                    }

                    coada=mijl-1;
                }
                else
                {
                    cap=mijl+1;
                }

                mijl=(cap+coada)/2;
            }
            fout<<raspuns+1<<'\n';
        }
    }

    fin.close();
    fout.close();
    return 0;
}