Pagini recente » Cod sursa (job #1318591) | Cod sursa (job #1728586) | Cod sursa (job #2340658) | Cod sursa (job #1684030) | Cod sursa (job #1414712)
#include <iostream>
#include <fstream>
unsigned long a[100000];
int zero( int value, unsigned len )
{
int st = 0;
int dr = len;
while ( st <= dr )
{
unsigned int m = ( dr - st ) / 2;
if ( a[m] == value )
{
while( a[m] == value )
{
++m;
}
return --m;
}
if ( a[m] < value )
{
st = m;
}
else
{
dr = m -1;
}
}
return -1;
}
int unu( int value, unsigned len )
{
int st = 0;
int dr = len;
while ( st < dr )
{
unsigned int m = ( dr + st ) / 2;
if ( a[m] == value )
{
while( a[m] == value )
{
++m;
}
return --m;
}
if ( a[m] < value )
{
st = m + 1;
}
else
{
dr = m -1;
}
}
return dr;
}
int doi( int value, unsigned len )
{
int st = 0;
int dr = len;
while ( st < dr )
{
unsigned int m = ( dr + st ) / 2;
if ( a[m] == value )
{
while( a[m] == value )
{
--m;
}
return ++m;
}
if ( a[m] < value )
{
st = m + 1;
}
else
{
dr = m -1;
}
}
return st;
}
int main( int argc, char* argv[] )
{
std::ifstream input("cautbin.in");
std::ofstream output("cautbin.out");
int N, M;
input >> N;
for ( int i = 0; i < N; ++i )
{
input >> a[i];
}
input >> M;
for ( int i = 0; i < M; ++i )
{
int first, second;
input >> first >> second;
switch( first )
{
case 0: output << zero( second, N ) + 1 << std::endl; break;
case 1: output << unu( second, N ) + 1 << std::endl; break;
case 2: output << doi( second, N ) + 1 << std::endl; break;
default: break;
}
}
input.close();
output.close();
return 0;
}