Cod sursa(job #1338784)

Utilizator madalin98Gherghe Madalin madalin98 Data 10 februarie 2015 12:52:42
Problema Cautare binara Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.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;
}