Cod sursa(job #1921418)

Utilizator popicabogdanPopica Bogdan popicabogdan Data 10 martie 2017 12:37:10
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int a[100002],n,m,sol;

void Citire()
{
    int i;
    fin >> n;
    for(i = 1; i <= n; i++)
        fin >> a[i];
    fin>>m;
}

void CautBin0(int x)
{
    int st,dr,mid;
    sol=0;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]==x) {sol=mid; st=mid+1;}
        else if(a[mid]<x) st=mid+1;
        else dr=mid-1;
    }
}

void CautBin1(int x)
{
    int st,dr,mid;
    sol=0;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]==x) {sol=mid; st=mid+1;}
        else if(a[mid]<x) {st=mid+1; sol=mid;}
        else dr=mid-1;
    }
}

void CautBin2(int x)
{
    int st,dr,mid;
    sol=0;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]==x) {sol=mid; dr=mid-1; }
        else if(a[mid]<x) {st=mid+1; sol=mid;}
        else dr=mid-1;
    }
}


int main()
{
    int i,x,op;
    Citire();
    for(i=1;i<=m;i++)
    {
        fin >> op >> x;
        if(op==0)
        {
            CautBin0(x);
            if(sol!=0) fout<<sol<<"\n";
            else fout<<-1<<"\n";
        }
        else if(op==1)
        {
            CautBin1(x);
            fout<<sol<<"\n";
        }
        else
        {
            CautBin2(x);
            fout<<sol<<"\n";
        }

    }
    fout.close();
    return 0;
}