Cod sursa(job #382858)

Utilizator rayvianPricope Razvan rayvian Data 14 ianuarie 2010 21:29:46
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");
const unsigned int SIZE=100000;


#define INF 0x7fffffff;

int v[SIZE];
struct
{
  int op;
  int  numar;
}operatii;
int n;
int m;

typedef unsigned char tip_op;

int return_pozitie(int start,int end,int element,tip_op tip)
{
  if(start==end)
    if(tip==0)
    {
      if(v[start]==element)
       return start;
      else
        return -1;
    }
    else if(tip==1)
    {
      if(v[start]<=element)
        return start;
      else
        return -1;
    }
    else if(tip==2)
    {
      if(v[start]>=element)
        return start;
      else
        return INF;
    }


  int mijloc=start+(end-start)/2;

  int p1=return_pozitie(start,mijloc,element,tip);
  int p2=return_pozitie(mijloc+1,end,element,tip);

  if(tip==1 || tip==0)
    return (p1>p2?p1:p2);

  else if(tip==2)
    return (p1<p2?p1:p2);
}


int main()
{
  f>>n;
  for(int i=1; i<=n; i++)
    f>>v[i];
  f>>m;


  for(int i=1; i<=m; i++)
  {
  	f>>operatii.op>>operatii.numar;
  	g<<return_pozitie(1,n,operatii.numar,operatii.op)<<endl;
  }



  return 0;
}