Cod sursa(job #1871331)

Utilizator ajajajEuuuuu ajajaj Data 7 februarie 2017 11:40:39
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int a[100000],N,i,j,result=-1,x,M;
short type;
void quick(int li,int ls)
{
    int i=0,j=0,aux=0,m=0;
    m=a[(li+ls)/2];
    i=li; j=ls;
    while(i<=j)
    {
        while(a[i]<m && i<ls)
        i++;
        while(a[j]>m && j>li)
        j--;
        if(i<=j)
        {
            aux=a[i];
            a[i]=a[j];
            a[j]=aux;
            i++;
            j--;
        }}
        if(i<ls)
        quick(i,ls);
        if(j>li)
        quick(li,j);
    }
int f0(int start,int end)
{
    int mid=(start+end)/2;
    if(start<=end)
    {if(a[mid]>x)
    return f0(start,mid-1);
    else
    if(a[mid]<x)
    return f0(mid+1,end);
    else
    {
        result=mid;
        f0(mid+1,end);
    }}
    return result;
}
int f1(int start,int end)
{
    int mid=(start+end)/2;
    if(start<=end)
    {if(a[mid]>x)
    return f1(start,mid-1);
    else
    {result=mid;
        return f1(mid+1,end);}
    }
    return result;
}
int f2(int start,int end)
{
    int mid=(start+end)/2;
if(start<=end)
{
  if(a[mid]<x)
  return f2(mid+1,end);
  else
  { result=mid;
    return f2(start,mid-1);}
}
   return result;}
int main()
{
   fin>>N;
    for(i=1;i<=N;i++)
    fin>>a[i];
    fin>>M;
    quick(1,N);
    for(i=1;i<=M;i++)
    {
        fin>>type;
        fin>>x;
        if(type==0)
        fout<<f0(1,N)<<"\n";
        else
        if(type==1)
        fout<<f1(1,N)<<"\n";
        else
        fout<<f2(1,N)<<"\n";
    }
    return 0;
}