Cod sursa(job #1330696)

Utilizator beatrice01Ferco Beatrice beatrice01 Data 30 ianuarie 2015 21:36:41
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");

int n,m,sir[100000],i,j,qst,x;

int question0 (int x)
{
    int left=1,right=n,mid;
    while(left<right)
    {
        mid=left+(right-left+1)/2;
        if(sir[mid]<=x) left=mid;
        else right=mid-1;
    }
     if(left>right or sir[left]!=x)
          return -1;
     else
          return left;
}

int question1 (int x)
 {
    int left=1,right=n,mid;
    while (left<right)
    {
        mid=(left+right)/2;
        if(sir[m]<=x) left=mid+1;
        else right=mid;
    }
    mid=(left+right)/2;
    if(sir[mid]>x)
       -- mid;
    return mid;
}

int question2 (int x)
{
    int left=1,right=n,mid;
    while (left<right)
    {
        mid=(left+right)/2;
        if(sir[m]<x) left=mid+1;
        else right=mid;
    }
    mid=(left+right)/2;
    if(sir[mid]<x)
       ++ mid;
    return mid;
}


int main()
{
    f>>n;
    for(i=1;i<=n;i++)f>>sir[i];
    f>>m;
    for(j=1;j<=m;j++)
    {
        f>>qst>>x;
        if(qst==0)
          g<<question0(x)<<'\n';
        if(qst==1)
          g<<question1(x)<<'\n';
       if(qst==2)
          g<<question2(x);
    }
    return 0;
}