Cod sursa(job #1068971)

Utilizator DiClauDan Claudiu DiClau Data 29 decembrie 2013 01:12:49
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>
using namespace std;
int v[100005];
int main ()
{
	FILE *in,*out;
	in=fopen("cautbin.in","r");
	out=fopen("cautbin.out","w");
	int n;
	fscanf(in,"%d",&n);
	int sol=0,ct=0,put=1;
	while (put<n)
	{
		put=put*2;
		ct++;
	}
	int i,pas=1<<ct-1;
	for (i=1;i<=n;i++)
	{
		fscanf(in,"%d",&v[i]);
	}
	int k,x,intr;
	fscanf(in,"%d",&k);
	for (i=0;i<k;i++)
	{
		fscanf(in,"%d%d",&intr,&x);
		pas=1<<ct-1;
		sol=0;
		if (intr==0)
		{
			while(pas>0)
			{
				if(sol+pas <=n && v[sol+pas]==x) 
					sol+=pas;
				pas>>=1;
			}
			if (v[sol]==x)
				fprintf(out,"%d\n",sol);
			else
				fprintf(out,"-1\n");
		}
		if (intr==1)
		{
			while(pas>0)
			{
				if(sol+pas <n && v[sol+pas]<=x) 
					sol+=pas;
				pas>>=1;
			}
			fprintf(out,"%d\n",sol);
		}
		if (intr==2)
		{
			while(pas>0)
			{
				if(pas-sol >0 && v[sol+pas]<=x-1) 
					sol+=pas;
				pas>>=1;
			}
			fprintf(out,"%d\n",sol+1);
		}
	}
	return 0;
}