Pagini recente » Cod sursa (job #662603) | Cod sursa (job #2700509) | Cod sursa (job #2281861) | Cod sursa (job #815982) | Cod sursa (job #1125610)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int Bsearch1( int st, int dr, vector <int> &v, int c )
{
if ( c > v.back() || c < v.front() )
return -2;
while ( st <= dr )
{
int mid = st + ( dr - st ) / 2;
if ( v[ mid ] == c )
{
while ( v [ mid + 1 ] == c )
mid ++;
return mid;
}
if ( v[ mid ] > c )
dr = mid - 1;
else
st = mid + 1;
}
return -2;
}
int Bsearch2( int st, int dr, vector<int> &v, int c )
{
while ( st <= dr )
{
int mid = st + ( dr - st ) / 2;
if ( v[ mid ] == c )
{
while ( v[ mid + 1] == c )
mid ++;
return mid;
}
if ( v [ mid ] < c )
st = mid + 1;
else
dr = mid - 1;
}
return st - 1;
}
int Bsearch3( int st, int dr, vector <int> &v, int c )
{
while ( st <= dr )
{
int mid = st + ( dr - st ) / 2;
if ( v[ mid ] == c )
{
while ( v [ mid - 1 ] == c )
mid --;
return mid;
}
if ( v[ mid ] < c )
st = mid + 1;
else
dr = mid - 1;
}
return st ;
}
int main ()
{
vector<int> v;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, c, x, aux, m;
f >> n;
for ( int i = 0; i < n; i ++ )
{
f >> aux;
v.push_back( aux );
}
f >> m;
for ( int i = 0; i < m; i++ )
{
f >> x;
f >> c;
switch ( x )
{
case 0 : g << Bsearch1( 0, n-1, v, c ) + 1 << '\n';
break;
case 1 : g << Bsearch2( 0, n-1, v, c ) + 1 << '\n';
break;
case 2 : g << Bsearch3( 0, n-1, v, c ) + 1 << '\n';
break;
}
}
f.close();
g.close();
return 0;
}