Cod sursa(job #1767322)

Utilizator dranoellenTurica Leonard-Petru dranoellen Data 28 septembrie 2016 21:58:38
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb

#include<iostream>
#include <fstream>
using namespace std;

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



int n, vect[100005],m;


int bin(int st,int dr,int x)
{
    int m=(st+dr)/2;

    while(st!=dr)
    {
        if(vect[m]==x)
        {

            if(st==m)
            {
                if(vect[dr]==x)return dr;
                else return st;
            }
            st=m;
        }
        if(vect[m]>x)dr=m;
        if(vect[m]<x)st=m+1;
        cout<<st<<' '<<dr<<'\n';
        m=(st+dr)/2;
    }
    return st;

}



int main()
{
    fin>>n;
    int i,cmmandid,subject;
    vect[n+1]=2147483647;
    for(i=1; i<=n; ++i)
        fin>>vect[i];
    fin>>m;
    for(i=0; i<m; ++i)
    {
        fin>>cmmandid>>subject;
        if(cmmandid==0)
        {
            int x=bin(1,n,subject);
            if(vect[x]==subject)fout<<x<<'\n';
            else fout<<-1<<'\n';
        }
        if(cmmandid==1)
        {
            int x=bin(1,n,subject);
            if(vect[x]==subject)fout<<x<<'\n';
            else fout<<x-1<<'\n';
        }
        if(cmmandid==2)
        {
            int x=bin(1,n,subject-1);
            if(vect[x]==subject-1)fout<<x+1<<'\n';
            else fout<<x<<'\n';
        }

    }
    return 0;
}