Mai intai trebuie sa te autentifici.

Cod sursa(job #331350)

Utilizator pykhNeagoe Alexandru pykh Data 13 iulie 2009 19:37:38
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>
		int v[100005],lo, hi, mid, soll;
		int N, T, x, y;
int zero(int sol)
	{
		for(lo=1,hi=N;lo<=hi;)
		{mid = lo + (hi-lo)/2;
			if(v[mid]<sol)lo=mid+1;
		else if(v[mid]>sol)hi=mid-1;
		else if(v[mid]==sol)return mid;
		}
		return -1;
		}
		
int unu(int sol)
	{		for(lo=1,hi=N;lo<=hi;)
		{mid = lo + (hi-lo)/2;
					if(v[mid]==sol)return mid;
					else if(v[mid]<sol){soll=mid;lo=mid+1;}
					else if(v[mid]>sol)hi=mid-1;
					}
					return soll;
					}
int doi(int sol)
	{		for(lo=1,hi=N;lo<=hi;)
		{mid = lo + (hi-lo)/2;
					if(v[mid]==sol)return mid;
					else if(v[mid]<sol)lo=mid+1;
					else if(v[mid]>sol){hi=mid-1;soll=mid;}
					}
					return soll;
			}
		
		
int main()
	{
		freopen("cautbin.in","r",stdin);
		freopen("cautbin.out","w",stdout);
		scanf("%d",&N);
		for(T=1;T<=N;T++)
		scanf("%d",&v[T]);
		scanf("%d",&T);
		for(;T;--T)
		{
			scanf("%d%d",&x,&y);
				if(!x)printf("%d\n",zero(y));
				else if(x==1)printf("%d\n",unu(y));
				else printf("%d\n",doi(y));
				}
		return 0;
		}