Cod sursa(job #2442121)

Utilizator alex.livadaruLivadaru Alexandru alex.livadaru Data 22 iulie 2019 19:57:24
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.72 kb
#include <iostream>
	
#include <fstream>
	
#include <assert.h>
	
 
	
using namespace std;
	
 
	
#define dim 100010
	
 
	
ifstream fi("cautbin.in");
	
ofstream fo("cautbin.out");
	
 
	
long int a[dim];
	
long int n,m;
	
long int x;
	
 
	
void cit()
	
{
	
    fi>>n;
	
 
	
    for(long int i=1;i<=n;i++)
	
        fi>>a[i];
	
 
	
    fi>>m;
	
}
	
 
	
long int cb0()
	
{
	
    long int s,f,m;
	
 
	
    s=1;
	
    f=n;
	
 
	
    while(s<=f)
	
    {
	
        m=(s+f)/2;
	
 
	
        if(a[m]<=x)
	
            s=m+1;
	
        else
	
            f=m-1;
	
    }
	
 
	
    m=(s+f)/2;
	
 
	
    if(a[m]>x)
	
        m--;
	
 
	
    if(a[m]==x)
	
        return m;
	
 
	
    return -1;
	
 
	
}
	
 
	
long int cb1()
	
{
	
    long int s,f,m;
	
 
	
    s=1;
	
    f=n;
	
 
	
    while(s<f)
	
    {
	
        m=(s+f)/2;
	
 
	
        if(a[m]<=x)
	
            s=m+1;
	
        else
	
            f=m;
	
    }
	
 
	
    m=(s+f)/2;
	
 
	
    if(a[m]>x)
	
        m--;
	
 
	
    return m;
	
}
	
 
	
long int cb2()
	
{
	
    long int s,f,m;
	
 
	
    s=1;
	
    f=n;
	
 
	
    while(s<f)
	
    {
	
        m=(s+f)/2;
	
 
	
        if(a[m]<x)
	
            s=m+1;
	
        else
	
            f=m;
	
    }
	
 
	
    m=(s+f)/2;
	
 
	
    if(a[m]<x)
	
        m++;
	
 
	
    return m;
	
}
	
 
	
int main()
	
{
	
    cit();
	
 
	
    int t;
	
 
	
    for(long int i=1;i<=m;i++)
	
        {fi>>t>>x;
	
        switch(t)
	
            {case 0:
	
                {fo<<cb0();
	
                fo<<'\n';
	
                break;}
	
            case 1:
	
                {fo<<cb1();
	
                fo<<'\n';
	
                break;}
	
            case 2:
	
                {fo<<cb2();
	
                fo<<'\n';
	
                break;}
	
        }}
	
 
	
    return 0;
	
}