Cod sursa(job #2656618)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 8 octombrie 2020 09:34:50
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n,v[100001],m,x;
void cerinta1()
{
	int st=1;
	int dr=n;
	int poz=-1;
	while(st<=dr)
	{
		int mij=(st+dr)/2;
		if(v[mij]<x)
		{
			st=mij+1;
		}	
		else if(v[mij]>x)
			dr=mij-1;
		else
		{
			poz=mij;
			st=mij+1;
		}
			
	}
	g<<poz<<"\n";
}
void cerinta2()
{	
	int st=1;
	int dr=n;
	int poz=-1;
	while(st<=dr)
	{
		int mij=(st+dr)/2;
		if(v[mij]<x && mij>poz)
		{
			poz=mij;
			st=mij+1;
		}	
		else if(v[mij]>x)
			dr=mij-1;
		else
		{
			poz=mij;
			st=mij+1;
		}
			
	}
	g<<poz<<"\n";
	
}

void cerinta3()
{	
	int st=1;
	int dr=n;
	int poz=-1;
	while(st<=dr)
	{
		int mij=(st+dr)/2;
		if(v[mij]>x && mij<poz)
		{
			poz=mij;
			dr=mij-1;
		}	
		else if(v[mij]<x)
			st=mij+1;
		else
		{
			poz=mij;
			dr=mij-1;
		}
			
	}
	g<<poz<<"\n";
	
}

void citire()
{
	f>>n;
	for(int i=1;i<=n;i++)
		f>>v[i];
}
void rezolvare()
{
	int c;
	f>>m;
	for(int i=1;i<=m;i++)
	{
		f>>c;
		f>>x;
		if(c==0)
			cerinta1();
		else if(c==1)
			cerinta2();
		else if(c==2)
			cerinta3();	
	
	}
}
int main()
{
	citire();
	rezolvare();
}