Cod sursa(job #1877304)

Utilizator Vasile_RotaruVasea Rotaru Vasile_Rotaru Data 13 februarie 2017 10:54:14
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream>

using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

int m,n,a[100001],x,u;

int findBinary(int i, int j, int a[],int x){
	int m = i + (j-i)/2;
	if(x < a[1] or x > a[n])return -1;
	if(a[m] == x)return m;
	if(x > a[m])return findBinary(m+1,n,a,x);
	if(x < a[m])return findBinary(1,m,a,x);
}

int main(){
	fin>>n;
	for(int i = 1;i <= n; ++i){
		fin>>a[i];
	}
	fin>>m;
	for(int i=0;i<m;++i){
		fin>>u>>x;
		int k = findBinary(1,n,a,x);
		while(a[k] == x)++k;
		--k;
		switch(u){
			case 0:{
				fout<<k<<"\n";
				break;
			}
			case 1:{
				if(k == -1)fout<<n<<"\n";
				else fout<<k<<"\n";
				break;
			}
			case 2:{
				if(k == -1)fout<<"1\n";
				else{
					while(a[k] == x) --k;
					++k;
					fout<<k<<"\n";
				}
				break;
			}
		}
	}
	return 0;
}