Cod sursa(job #361197)

Utilizator MihaiGmihaig MihaiG Data 4 noiembrie 2009 00:38:57
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#define nmax 100005
FILE*f=fopen("cautbin.in","r");
FILE*g=fopen("cautbin.out","w");
int i,j,v[nmax],st,dr,n,m,tip,nr,sol,mid,;

void citire(){
	fscanf(f,"%d ",&n);
	for(i=1;i<=n;i++){
		fscanf(f,"%d ",&v[i]);
	}
	fscanf(f,"%d",&m);
}

void tip0(){
	sol=-1;
	st=1;
	dr=n;
	while(st<=dr){
		mid=(st+dr)/2;
		if(v[mid]<=nr){
			st=mid+1;
			if(v[mid]==nr){
				sol=mid;
			}
		}else{
			dr=mid-1;
		}
	}
	fprintf(g,"%d\n",sol);
}

void tip1(){
	st=1;
	dr=n;
	while(st<=dr){
		mid=(st+dr)/2;
		if(v[mid]<=nr){
			st=mid+1;
			sol=mid;
		}else {
			dr=mid-1;
		}
	}
	fprintf(g,"%d\n",sol);
}

void tip2(){
	st=1;
	dr=n;
	while(st<=dr){
		mid=(st+dr)/2;
		if(v[mid]>=nr){
			sol=mid;
			dr=mid-1;
		}else {
			st=mid+1;
		}
	}
	fprintf(g,"%d\n",sol);
}

int main(){
	citire();
	for(i=0;i<m;i++){
		fscanf(f,"%d %d",&tip,&nr);
		if(tip==0){
			tip0();
		}else if(tip==1){
			tip1();
		}else if(tip==2){
			tip2();
		}
	}
	
	fclose(f);
	fclose(g);
	return 0;
}