Cod sursa(job #2436427)

Utilizator liviu_gheorghe1234Liviu Gheorghe liviu_gheorghe1234 Data 5 iulie 2019 18:32:13
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
vector <int> A;
int N,x,o,q;
int bin_0(int left,int right,int value)
{
int ans=-1;
	while(left<=right)
	{
		int middle=(left+right)/2;
		if(value>=A[middle]) {
            if(value==A[middle])ans=middle;
			left=middle+1;
			}
		else right=middle-1;
	}
	return ans+1;
}
int bin_1(int left,int right,int value)
{
	int ans=0;
	while(left<=right)
	{
	   int middle=left+(right-left)/2;
	   if(value>=A[middle]) 
	   {
	   	if(A[middle]==value) ans=middle;
	   	left=middle+1;
	   }
	   else right=middle-1;
    }
    return ans+1;
}
int bin_2(int left,int right,int value)
{
	int ans=0;
	while(left<=right)
	{
	   int middle=left+(right-left)/2;
	   if(value<=A[middle]) 
	   {
	   	if(A[middle]==value) ans=middle;
	   	right=middle-1;
	   }
	   else left=middle+1;
    }
    return ans+1;
}
void solveQuery(int o,int x)
{
  	if(o==0)
  	{
  		fout<<bin_0(0,A.size()-1,x);
  	}
  	else if(o==1)
  	{
  		fout<<bin_1(0,A.size()-1,x);
  	}
  	else fout<<bin_2(0,A.size()-1,x);
  	fout<<'\n';
}
void read()
{
  fin>>N;
  for(int i=0;i<N;i++)
  {
  	fin>>x;
  	A.push_back(x);
  }
  fin>>q;
  for(int i=0;i<q;i++)
  {
  	fin>>o>>x;
  	solveQuery(o,x);
  }
}
int  main()
{
	read();
return 0;
}