Pagini recente » Cod sursa (job #2343424) | Cod sursa (job #831801) | Cod sursa (job #2478206) | Cod sursa (job #1129961) | Cod sursa (job #2705549)
#include <bits/stdc++.h>
#define N 100008
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n;
int v[N];
void Citire()
{
int i;
fin >> n;
for( i=1; i<=n; i++ )
fin >> v[i];
}
int CautareBinara1( int x )
{
int st, dr;
int mij;
int poz = -1;
st = 1; dr = n;
while( st <= dr )
{
mij = ( st + dr ) / 2;
if( v[mij] < x )
{
st = mij + 1;
}
else if( v[mij] > x )
{
dr = mij - 1;
}
else if( v[mij] == x )
{
poz = mij;
st = mij + 1;
}
}
return poz;
}
int CautareBinara2( int x )
{
int st, dr;
int mij;
int poz = -1;
st = 1; dr = n;
while( st <= dr )
{
mij = ( st + dr ) / 2;
if( v[mij] <= x )
{
st = mij + 1;
poz = mij;
}
else if( v[mij] > x )
{
dr = mij - 1;
}
}
return poz;
}
int CautareBinara3( int x )
{
int st, dr;
int mij;
int poz = -1;
st = 1; dr = n;
while( st <= dr )
{
mij = ( st + dr ) / 2;
if( v[mij] < x )
{
st = mij + 1;
}
else if( v[mij] >= x )
{
dr = mij - 1;
poz = mij;
}
}
return poz;
}
void Rezolvare()
{
int i, q;
int cb;
int k, x;
fin >> k;
for( i=1; i<=k; i++ )
{
fin >> q >> x;
if( q == 0 )
{
cb = CautareBinara1( x );
fout << cb << "\n";
}
else if( q == 1 )
{
cb = CautareBinara2( x );
fout << cb << "\n";
}
else if( q == 2 )
{
cb = CautareBinara3( x );
fout << cb << "\n";
}
}
}
int main()
{
Citire();
Rezolvare();
fin.close();
fout.close();
return 0;
}