Cod sursa(job #1248614)

Utilizator tabbyMaria Vasiliu tabby Data 25 octombrie 2014 17:17:33
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
//#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
FILE *in=fopen("cautbin.in","r");
FILE *out=fopen("cautbin.out","w");
int a[100000];
int cautbin(int s, int d,int x)
{
	int m=-1;
	if(s>d) return -1;
	else
	{
		m=(s+d)/2;
		if(x==a[m])
			return m; 
		else 
			if(x<a[m]) return cautbin(s,m-1,x);
			else return cautbin(m+1,d,x);
	}
	return m;
}

int main()
{
	int n,nrc,c,r,poz;
	fscanf(in,"%d",&n);
	for(int i=1;i<=n;i++)
		fscanf(in,"%d",&a[i]);
	fscanf(in,"%d",&nrc);
	for(int i=0;i<nrc;i++)
	{
		fscanf(in,"%d%d",&c,&r);
		if(c==0)
		{
			poz=cautbin(1,n,r);
			if(poz==-1) fprintf(out,"-1\n");
			else
			{
				while(a[poz]==a[poz+1]) poz++;
				fprintf(out,"%d\n",poz);
			}
		}
		if(c==1)
		{
			poz=cautbin(1,n,r);
			while(poz==-1)
			{r--; poz=cautbin(0,n,r);}

			while(a[poz]==a[poz+1]) poz++;
			fprintf(out,"%d\n",poz);
		}
		if(c==2)
		{
			poz=cautbin(1,n,r);
			while(poz==-1)
			{r++; poz=cautbin(0,n,r);}
			while(a[poz]==a[poz-1]) poz--;
			fprintf(out,"%d\n",poz);
		}
	}
	fclose(in); fclose(out);
	return 0;
}