Cod sursa(job #964441)

Utilizator alexbangauBangau Marian Alexandru alexbangau Data 20 iunie 2013 23:04:54
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<iostream>
#include<fstream>
using namespace std; 
long int n, x[100001], val1, m;
long int caut_bin(long int x[],long int st,long int dr,long int val)
{
	if(st==dr)
		{
		return st;
		}
	else
		{
		long int mij;
		mij=st+(dr-st)/2;
		if(val==x[mij])
			return mij;
		if(val>x[mij])
			caut_bin(x,mij,dr,val);
		else
			caut_bin(x,st,mij,val);
		}
		
return -1;
}

int main(){
	ifstream f1("cautbin.in");
	f1>>n;
	for(long int i=1; i<=n; i++)
		f1>>x[i];
	int poz;
	f1>>m;
	ofstream f2("cautbin.out");
	for(long int i=1; i<=m; i++)
		{long int cond1;
		f1>>cond1;
		f1>>val1;
		poz=caut_bin(x,1,n,val1);
		if(cond1==0)
			{
				if(x[poz]!=val1)
					f2<<"-1"<<endl;
				else
				{
					long int j=poz;
					while(x[poz]==x[j])
						j++;
					f2<<j-1<<endl;
				}
			}
		else
			{
			if(cond1==1)
				{
					if(x[poz]==val1)
						{
						long int j=poz;
						while(x[poz]==x[j])
							j++;
						f2<<j-1<<endl;						
						}
					else
						f2<<poz-1<<endl;
				}
			else
				{
				if(x[poz]==val1)
						{
						long int j=poz;
						while(x[poz]==x[j])
							j--;
						f2<<j+1<<endl;						
						}
					else
						f2<<poz+1<<endl;					
				}
			}
		}
	f1.close();	
	f2.close();
	return 0;
}