Cod sursa(job #524567)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 22 ianuarie 2011 13:37:30
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<iostream>
#include<fstream>
using namespace std;
unsigned int n,x[100001],m,tip,nr,aaa,pas;
ifstream aa("cautbin.in");
ofstream ss("cautbin.out");
int main() {
	int i,j;
	aa >> n;
	for (i=1;i<=n;++i) {
		aa >> x[i];
	}
	aaa=1;
	while (aaa<=n) {
		aaa*=2;
	}
	aaa=aaa/2;
	aa >> m;
	for (i=1;i<=m;++i) {
		aa >> tip >> nr;
		pas=aaa;
		switch (tip) {
			case 0:
				for (j=0;pas>0;pas/=2) {
					if (x[j+pas]<=nr && j+pas<=n) {
						j+=pas;
					}
				}
				if (x[j]==nr) ss<<j;
				else ss << "-1";
				break;
			case 1:
				for (j=0;pas>0;pas/=2) {
					if (x[j+pas]<=nr && j+pas<=n) {
						j+=pas;
					}
				}
				ss<<j;
				break;
			case 2:
				for (j=0;pas>0;pas/=2) {
					if (x[j+pas]<nr && j+pas<=n) {
						j+=pas;
					}
				}
				ss<<j+1;
				break;
		}
		ss << "\n";
	}
	return 0;
}