Cod sursa(job #741462)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 26 aprilie 2012 07:53:32
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<stdio.h>

int op,nr,poz,n,V[100010],m;

FILE*f=fopen("cautbin.in","r");
FILE*g=fopen("cautbin.out","w");

int caut(int val){
	int step,i;
	for(step=1;step<n;step<<=1);
	for(i=0;step;step>>=1)
		if((i+step)<=n&&V[i+step]<=val)
			i+=step;
	return i;
}


void solve(){
	fscanf(f,"%d",&n);
	for(int i=1;i<=n;i++)
		fscanf(f,"%d",&V[i]);
	fscanf(f,"%d",&m);
	for(int j=1;j<=m;j++){
		fscanf(f,"%d%d",&op,&nr);
		poz=caut(nr);
		switch(op){
		case 0:
			if(V[poz]!=nr)
				poz=-1;
			fprintf(g,"%d\n",poz);
			break;
		case 1:
			fprintf(g,"%d\n",poz);
			break;
		default:
			if(V[poz]!=nr)
				poz++;
			else{
				while(V[poz]==nr)
					poz--;
				poz++;
			}
			fprintf(g,"%d\n",poz);
			break;
		}
	}
}

int main(){
	solve();
	return 0;
}