Pagini recente » Cod sursa (job #1351421) | Cod sursa (job #17247) | Monitorul de evaluare | Cod sursa (job #2956968) | Cod sursa (job #261644)
Cod sursa(job #261644)
#include<stdio.h>
long n , X [ 100005 ] , x ;
long cautare ( long val )
{
long st , dr , m ;
st = 1 ; dr = n ;
while ( st <= dr )
{
m = ( st + dr ) / 2 ;
if ( X[m] == val ) return m ;
if ( val >= X [ m ] )
st = m + 1 ;
else
dr = m - 1 ;
}
if ( x == 0 && st >dr ) return -1 ;
return st ;
}
long cautare1 ( long val )
{
long st , dr , m ;
st = 1 ; dr = n ;
while ( st <= dr )
{
m = ( st + dr ) / 2 ;
if ( val <= X [ m ] )
dr = m - 1 ;
else
st = m + 1 ;
}
return st ;
}
int main ( )
{
freopen ( "cautbin.in" , "r" , stdin ) ;
freopen ( "cautbin.out" , "w" , stdout ) ;
scanf ( "%ld" , & n ) ;
long i , m , nr1 , nr , y ;
for ( i = 1 ; i <= n ; i ++ )
scanf ( "%ld" , & X [ i ] ) ;
scanf ( "%ld" , & m ) ;
for ( i = 1 ; i <= m ; i ++ )
{
scanf ( "%ld%ld" , & x , & y ) ;
nr = cautare ( y ) ;
nr1 = cautare1 ( y ) ;
if ( x == 0 )
{ printf ( "%ld\n" , nr ) ; }
else
{
if ( x == 2 )
{ printf ( "%ld\n" , nr ) ; }
else
if ( x == 1 )
{ printf ( "%ld\n" , nr1 -1 ) ; }
}
}
return 0 ;
}