Cod sursa(job #842133)

Utilizator Brz_VladBrezae Vlad Brz_Vlad Data 26 decembrie 2012 11:57:40
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.22 kb
#include <stdio.h>

#define MAXN 100001

int N,M;
int v[MAXN];

int cautaElement(int x)
{
	int st,dr,mid;
	st = 1; dr = N;
	int pos=-1;
	while(st <= dr){
		mid = (st+dr)/2;
		if( v[mid] < x ){
			st = mid+1;
		}
		else if( v[mid] == x){
			st = mid+1;
			pos = mid;
		}
		else{
			dr = mid-1;
		}	
	}
	
	return pos;
}

int cautaElementMaximMaiMic(int x)
{
	int st,dr,mid;
	st = 1; dr = N;
	int pos=1;
	while(st <= dr){
		mid = (st+dr)/2;
		if( v[mid] > x ){
			dr = mid-1;
		}
		else{			
			pos = mid;
			st = mid+1;
		}
	}
	return pos;
}

int cautaElementMinimMaiMare(int x)
{
	int st,dr,mid;
	st = 1; dr = N;
	int pos=N;
	while(st <= dr){
		mid = (st+dr)/2;
		if( v[mid] < x ){
			st = mid+1;			
		}
		else{
			dr = mid-1;
			pos = mid;
		}	
	}
	
	return pos;
}

int main(int argc, char* argv[])
{
	freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
	
	scanf("%d",&N);
	
	int i,tip,el;
	
	for(i=1;i<=N;i++)
		scanf("%d",&v[i]);
	
	scanf("%d",&M);
	
	for(i=1;i<=M;i++){
		scanf("%d %d",&tip,&el);
		switch(tip){
			case 0: printf("%d\n",cautaElement(el));
				break;
			case 1: printf("%d\n",cautaElementMaximMaiMic(el));
				break;
			case 2: printf("%d\n",cautaElementMinimMaiMare(el));
				break;			
		}
	}
	
	
	return 0;
}