Cod sursa(job #825243)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 27 noiembrie 2012 22:31:19
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
using namespace std;

ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
	
int n, i, step, a[100000], x, j, val, m, sol;

int cautbin0(int val){
	for(step=1; step<n; step<<=1);
		for(i=0; step; step>>=1) if(i+step <= n && a[i+step] <= val) i+=step;
	if(a[i] != val) sol = -1;
		else sol = i;
	fout << sol+1 << "\n";
}

int cautbin1(int val){
	for(step=1; step<n; step<<=1);
		for(i=0; step; step>>=1) if(i+step <= n && a[i+step] <= val) i+=step;
	sol = i;
	fout << sol+1 << "\n";
}

int cautbin2(int val){
	for(step=1; step<n; step<<=1);
		for(i=n; step; step>>=1) if(i-step >= 0 && a[i-step]>= val) i-=step;
	sol = i;
	fout << sol+1 << "\n";
}


int main(){
	
	fin >> n;
	for(j=0; j<n; j++){
		fin >> a[j];
	}
	
	fin >> m;
	for(j=0; j<m; j++){
		fin >> x >> val;
		if(x == 0) cautbin0(val);
		else if(x == 1) cautbin1(val);
		else if(x == 2) cautbin2(val);
	}
	
	fin.close();
	fout.close();
	
	return 0;
}