Cod sursa(job #1338781)

Utilizator madalin98Gherghe Madalin madalin98 Data 10 februarie 2015 12:52:02
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
int v[100];
int caut1(int st,int dr,int x)
{
    int m,a;
    m=(st+dr)/2;
    if(st==dr)return -1;
    if(v[m]==x)a=m;
      else if(v[m]>x)a=caut1(st,m,x);
            else if(v[m]<x)a=caut1(m+1,dr,x);
    while(v[a+1]==x)a++;
    return a;
}
int caut2(int st,int dr,int x)
{
    int m,a;
    m=(st+dr)/2;
    if(st==dr)return -1;
    if(v[m]<=x)a=m;
      else if(v[m]>x)a=caut2(st,m,x);
            else if(v[m]<x)a=caut2(m+1,dr,x);
    while(v[a+1]<=x&&a+1<=dr)a++;
    return a;
}
int caut3(int st,int dr,int x)
{
    int m,a;
    m=(st+dr)/2;
    //if(st==dr)return -1;
    if(v[m]>=x)a=m;
      else if(v[m]>x)a=caut3(st,m,x);
            else if(v[m]<x)a=caut3(m+1,dr,x);
    while(v[a-1]>=x&&v[a-1]>=st)a--;
    return a;
}
int main()
{
    int n,k,i,nr,opt;
    f>>n;
    for(i=1;i<=n;i++)f>>v[i];
    f>>nr;
    for(i=1;i<=nr;i++)
    {
        f>>opt>>k;
        if(opt==0)g<<caut1(1,n,k)<<endl;
          else if(opt==1)g<<caut2(1,n,k)<<endl;
               else if(opt==2)g<<caut3(1,n,k)<<endl;
    }
    return 0;
}