Cod sursa(job #662281)

Utilizator galbenugalbenu dorin galbenu Data 16 ianuarie 2012 13:32:35
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<iostream>
#include<fstream>
#include<cstring>
#define lmax 1000
using namespace std;
ifstream f("cautbin.in",fstream::in);
ofstream g("cautbin.out",fstream::out);
unsigned int a[lmax],n,m;
int search(short int o,short int x)
{unsigned int st,dr,m,loc=-1,lol;
 st=1;
 dr=n;
 m=(st+dr)/2;
 while(st<=dr)
 { if(a[m]==x)
	  loc=m,st=dr+1;
  else
	  if(a[m]<x)
	  {st=m+1;
	   m=(st+dr)/2;
	  }
	  else
	  {dr=m-1;
	  m=(st+dr)/2;
	  }
 }
 if(loc!=-1)
 { if(o==0)
 { lol=a[loc];
   while(a[loc]==lol &&loc<=n)
	   loc++;
 }
 else
  if(o==1)
  {lol=a[loc]; 
   while(a[loc]==lol && loc>=1)
	   loc--;
   if(loc>1)
	   loc--;
  }
  else
	 if(o==2)
	 {lol=a[loc];
	  while(a[loc]==lol && loc<=n)
		  loc+=1;
	  if(loc<n)
		  loc+=1;
	 }
 }
   return loc;
}
void read()
{unsigned int i,o,x;
 f>>n; 
  for(i=1;i<=n;i++)
	  f>>a[i];
  f>>m;
  for(i=1;i<=m;i++)
  {f>>o>>x;
   cout<<search(o,x)<<"\n";
  }
}
int main()
{read();
 f.close();
 g.close();
 return 0;
}