Cod sursa(job #2241660)

Utilizator GheorghitaGheorghita Stefan-Marian Gheorghita Data 16 septembrie 2018 17:09:06
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f ("cautbin.in");
ofstream g ("cautbin.out");

int n,m;
int a[100005];

void cautbin0(int x)
{
    int st=1,dr=n,mid;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]<=x)st=mid+1;
        else dr=mid-1;
    }
    mid=(st+dr)/2;
    if(a[mid]!=x)mid--;
    if(a[mid]!=x)g<<"-1"<<"\n";
    else g<<mid<<"\n";
}

void cautbin1(int x)
{
    int st=1,dr=n, mid;
   while(st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]<=x)st=mid+1;
        else dr=mid-1;
    }
    mid=(st+dr)/2;
    if(a[mid]>x)mid--;
    g<<mid<<"\n";

}

void cautbin2(int x)
{
    int st=1,dr=n,mid;
    while (st<=dr)
    {
        mid=(st+dr)/2;
        if(a[mid]>=x)dr=mid-1;
        else st=mid+1;
    }
    mid=(st+dr)/2;
    if(a[mid]<x)mid++;
    g<<mid<<"\n";
}

int main()
{
    int i,c;
    int nr;
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
    }
    f>>m;
    for(i=1;i<=m;i++)
    {
        f>> c >> nr;
        if(c==0)cautbin0(nr);
        if(c==1)cautbin1(nr);
        if(c==2)cautbin2(nr);
    }

    return 0;
}