Cod sursa(job #414557)

Utilizator AndreiRSStatescu Andrei Rares AndreiRS Data 10 martie 2010 11:17:41
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>
#define DIM 100001

int v[DIM];
int n,m;
int i,ii,x,sw;
int p,u,mij;

int main(){
	
	FILE*f1=fopen("cautbin.in","r");
	FILE*f2=fopen("cautbin.out","w");
	
	fscanf(f1,"%d",&n);
	for(i=1; i<=n; i++)
		fscanf(f1,"%d",&v[i]);
	fscanf(f1,"%d",&m);
	
	for(ii=1; ii<=m; ii++){
		fscanf(f1,"%d",&sw);
		fscanf(f1,"%d",&x);
		p = 1,u = n;
		
		switch(sw){
		case 0:			
			while(p <= u){
				mij = p + (u - p)/2;
				if(x < v[mij])
					u = mij - 1;
				else
					p = mij + 1;
			}			
			if(x == v[u])
				fprintf(f2,"%d\n",u);
			else
				fprintf(f2,"-1\n");
			
			break;
		case 1:			
			while(p <= u){
				mij = p + (u - p)/2;
				if(x < v[mij])
					u = mij - 1;
				else
					p = mij + 1;
			}
			if(v[u] == x)
				fprintf(f2,"%d\n",u);
			else
				fprintf(f2,"%d\n",p);
			
			break;
		case 2:			
			while(p <= u){
				mij = p + (u - p)/2;
				if(x <= v[mij])
					u = mij - 1;
				else
					p = mij + 1;				
			}
			if(v[p] == x)
				fprintf(f2,"%d\n",p);
			else
				fprintf(f2,"%d\n",u);			
			
			break;			
		}		
	}
	
	fclose(f1);
	fclose(f2);
	
	return 0;
}