Cod sursa(job #377113)

Utilizator dornescuvladVlad Eugen Dornescu dornescuvlad Data 23 decembrie 2009 15:13:23
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include<stdio.h>

using namespace std;

int N,M,i,v[100005],x,y;

int intrebare1(int y)

{   
	int i,j,m,poz;
	i=1;
	j=N;
	while(i<j)
	{
       m=(i+j)/2;
	   if(y>v[m])
		   i=m+1;
	   else 
		   j=m;
	   
	}
	if(y==v[i])
	{   
		poz=i;
		while(poz<=N)
		{   
			if(v[poz]==y)
			    poz++;
            else
				break;
		}
	printf("%d",poz-1);
	printf("\n");
	}
	else
	{
		printf("-1");
		printf("\n");
	}
	return 0;
}	
	

int intrebare2(int y)
{
	int i,j,m,poz;
	i=1;
	j=N;
	while(i<j)
	{
       m=(i+j)/2;
	   if(v[m]>=y)
		   j=m;
	   else 
		   i=m+1;
	}
	poz=i;
	
	   if(v[i]>=y)
	     {   
		   
		   while(poz<=N)
		      {     
			if(v[poz]<=y)
			    poz++;
            else
				break;
		      }
         }
	printf("%d",poz-1);
	printf("\n");
	return 0;
}
	
int intrebare3(int y)
{
	int i,j,m,poz;
	i=1;
	j=N;
	while(i<j)
	{
       m=(i+j)/2;
	   if(y>=v[m])
		   i=m+1;
	   else 
		   j=m;
	}
	
  
	if(y<=v[i])
	{   
		poz=i;
		while(0<=poz)
		{   
			if(v[poz]>=y)
			    poz--;
            else
				break;
		}
	}
	printf("%d",poz+1);
	printf("\n");
	return 0;
}
		
    





int main()

{
	freopen("cautbin.in" , "r" , stdin);
	freopen("cautbin.out", "w" , stdout);
	
	scanf("%d",&N);
	
	for(i=1;i<=N;i++)
		scanf("%d",&v[i]);
	
	scanf("%d",&M);
	for(i=0;i<M;i++)
	{
		scanf("%d",&x);
	    scanf("%d",&y);
		if(x==0)
			intrebare1(y);
		if(x==1)
			intrebare2(y);
		if(x==2)
			intrebare3(y);
	}

return 0;	
}