Cod sursa(job #335121)

Utilizator szabotamasSzabo Tamas szabotamas Data 28 iulie 2009 18:51:48
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>

using namespace std;

long q,w,i,n,m,poz,x,v[100001]; 


void bin0(long beg, long end){
	if (beg==end) return;
	if(v[(beg+end)/2]==x){
		poz=(beg+end)/2;
		bin0((beg+end)/2+1,end);
		return;
	}
	if(v[(beg+end)/2]<x){
		bin0((beg+end)/2+1,end);
		return;
	}
	if(v[(beg+end)/2]>x){
		bin0(beg,(beg+end)/2-1);
		return;
	}
}

void bin1(long beg, long end){
	if (beg==end) return;
	if(v[(beg+end)/2]<=x){
		poz=(beg+end)/2;
		bin1((beg+end)/2+1,end);
		return;
	}
	if(v[(beg+end)/2]<x){
		bin1((beg+end)/2+1,end);
		return;
	}
	if(v[(beg+end)/2]>x){
		bin1(beg,(beg+end)/2-1);
		return;
	}
	
}
void bin2(long beg, long end){
	if (beg==end) return;
	if(v[(beg+end)/2]>=x){
		poz=(beg+end)/2;
		bin2(beg,(beg+end)/2);
		return;
	}
	if(v[(beg+end)/2]<x){
		bin2((beg+end)/2+1,end);
		return;
	}
	if(v[(beg+end)/2]>x){
		bin2(beg,(beg+end)/2);
		return;
	}
	
}


int main(){
	ifstream fin("cautbin.in");
	ofstream fout("cautbin.out");
		fin >> n;
		for (i=1; i<=n; i++){
			fin >> v[i];
		}
		fin >> m;
		for (w=1; w<=n; w++){
			poz=-1;
			fin >> q >> x;
			if (q==0){
				bin0(1,n);
				fout << poz << "\n";
			}
			if (q==0){
				bin1(1,n);
				fout << poz << "\n";
			}
			if (q==0){
				bin2(1,n);
				fout << poz << "\n";
			}
		}
	fin.close();
	fout.close();
}