Cod sursa(job #339137)

Utilizator MihaiGmihaig MihaiG Data 8 august 2009 14:02:27
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>

FILE*f=fopen("cautbin.in","r");
FILE*g=fopen("cautbin.out","w");
int n,sir[100001],m,tip,cif,mid,out,s,d,i;

void cazu0(){
	out = -1;
	s=1;
	d=n;
	while(s<=d){
		mid = s+(d-s)/2;
		if(sir[mid]>cif)
			d=mid-1;
			else if(sir[mid]<cif)
				s=mid+1;
			else{
				s=mid+1;
				out=mid;
			}
	}
}
void cazu1(){
	s=1;
	d=n;
	while(s<=d){
		mid = s+(d-s)/2;
		if(sir[mid]>cif)
			d=mid-1;
		else{
			out=mid;
			s=mid+1;
		}
	}
}
void cazu2(){
	out = -1;
	s=1;
	d=n;
	while(s<=d){
		mid = s+(d-s)/2;
		if(sir[mid]>=cif){
			out=mid;
			d=mid-1;}
		else s=mid+1;
	}
}
void citire(){
	fscanf(f,"%d",&n);
	for(i=1;i<=n;i++)
		fscanf(f,"%d",&sir[i]);
	fscanf(f,"%d",&m);
}
int main(){
	citire();
	
	for(i=1;i<=m;i++){
		fscanf(f,"%d %d",&tip,&cif);
		if(tip==0){
			cazu0();
			fprintf(g,"%d",out);}
		else if(tip==1){
				cazu1();
				fprintf(g,"%d",out);}
		else{
			cazu2();
			fprintf(g,"%d",out);}
	}		
	
	fclose(f);
	fclose(g);
	return 0;
}