Cod sursa(job #432533)

Utilizator ncbllrNegrii Costin ncbllr Data 2 aprilie 2010 14:55:01
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include<iostream.h>
#include<fstream.h>  
int n,m;
int v[100000];
int caut_bin0( int value)
{   
	int st = 1, dr = n;
	while ( st != dr)
	{
		int mij = ((long long) st + dr) /2;
		if( v[ mij ] > value)
		{
			dr = mij;
		}
		else st = mij + 1;
		
	}
	if( v[ st ] == value) return st;
	if( v[ st - 1] == value) return st-1;
	return -1;
		
}
int caut_bin1( int value)
{  
	int st = 1, dr = n;
	while (st != dr )
    {
		int mij = ((long long)st +dr ) / 2;
        if  (v[ mij ] > value) 
		    dr = mij;
        else  st = mij+1;
	}
    if ( v[ st ] <= value) return st;
    if ( v[ st - 1 ] <= value) return st-1;    
		
}	
int caut_bin2( int value)
{  
	int st=1, dr = n;
	while (st != dr )
	{   
		int mij = ((long long )st + dr) / 2;
        if  (v[ mij ] >= value) 
			dr = mij;
        else  st = mij + 1;
	}
	return st;
}		
		
int main()
{   int i;
    freopen("cautbin.in","r",stdin);
	freopen("cautbin.out","w",stdout);
    cin>>n;
    for(i = 1; i <= n; i++) 
        cin>>v[i];
    cin>>m;
    for(int j = 1; j <= m; j++)
	{
		int type, value;
		cin>>type>>value;
		if( type == 0)
			cout<< caut_bin0( value)<<endl;
		if( type == 1)
			cout<< caut_bin1( value)<<endl;
		if( type == 2)
			cout<< caut_bin2( value)<<endl;
	}
    
   
     f.close();
         
     return 0;
     
}