Cod sursa(job #2067111)

Utilizator bpetru05Mitoiu Bogdan Petru bpetru05 Data 15 noiembrie 2017 20:53:00
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
using namespace std;
int N[100009],C,nr,n,m,i,mid,hi,lo,r1,aux;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int main()
{
	f>>n;
	for(i=1;i<=n;i++)
	{
		f>>N[i];
	}
	f>>m;
	for(i=1;i<=m;i++)
	{
		f>>C>>nr;
		if(C==0)
		{
			
			hi=n;
			lo=1;
			while(nr!=N[mid])
			{
				mid=lo+(hi-lo)/2;
				if(nr<N[mid])
				{
					hi=mid-1;
				}
				else
				{
					lo=mid+1;
				}
			}
			r1=mid;
			if(mid!=nr)
			{
				r1=-1;
			}
			else
			{
				while(N[r1]==nr)
				{
					if(N[r1+1]==N[r1])
							r1++;
						else
							break;
				}
			}

			g<<r1;
		}
		if(C==1)
		{
			hi=n;
			lo=1;
			while(nr!=N[mid])
			{
				mid=lo+(hi-lo)/2;
				if(nr<N[mid])
				{
					hi=mid-1;
				}
				else
				{
					lo=mid+1;
				}
			}
			r1=mid;
			if(r1==mid)
			{
				while(N[r1]==nr)
				{
					if(N[r1+1]==N[r1])
							r1++;
						else
							break;
				}
			
			}
			else
			{
				while(N[r1]==aux)
				{
					if(N[r1+1]==N[r1])
						r1++;
					else
						break;
				}
			}
			g<<r1;
		}
		if(C==2)
		{
			hi=n;
			lo=1;
			while(nr!=N[mid])
			{
				mid=lo+(hi-lo)/2;
				if(nr<N[mid])
				{
					hi=mid-1;
				}
				else
				{
					lo=mid+1;
				}
			}
			r1=mid;
			if(r1==mid)
			{
				while(N[r1]==nr)
				{
					if(N[r1+1]==N[r1])
							r1++;
						else
							break;
				}
			
			}
			else
			{
				while(N[r1]==aux)
				{
					if(N[r1-1]==N[r1])
						r1--;
					else
						break;
				}
			}
			g<<r1;
		}
	}
	f.close();
	g.close();
	return 0;
}