Pagini recente » Diferente pentru utilizator/andrici_cezar intre reviziile 59 si 58 | Diferente pentru monthly-2014/runda-9/solutii intre reviziile 3 si 16 | Profil AdryaNNo | | Cod sursa (job #2037112)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100000], a[100000];
int CautareBinara0 (int l, int r, int gasit) {
int m;
m = (l + r) / 2;
while (l <= r)
{
if (v[m] <= gasit)
l = m + 1;
else
r = m - 1;
}
if (v[m] > gasit) m --;
if (v[m] == gasit)
return m;
return -1;
}
int CautareBinara1 (int l, int r, int gasit)
{
int m;
m = (l + r) / 2;
while (l < r)
{
m = (l + r) / 2;
if (v[m] <= gasit)
l = m + 1;
else
r = m;
}
if (v[m] > gasit)
-- m;
return m;
}
int CautareBinara2 (int l, int r, int gasit)
{
int m;
m = (l + r) / 2;
while (l < r) {
m = (l + r) / 2;
if (v[m] < gasit)
l = r + 1;
else
r = m;
}
if (v[m] < gasit)
++ m;
return m;
}
int main()
{
int n, nr, tip, val;
fin >> n;
for ( int i = 1; i <= n; ++ i)
fin >> v[i];
fin >> nr;
for ( int i = 1; i <= nr; ++ i)
{
fin >> val;
fin >> tip;
}
while ( nr-- )
{
if ( tip == 0 )
fout << CautareBinara0(1, n, val);
if ( tip == 1 )
fout << CautareBinara1(1, n, val);
if ( tip == 1 )
fout << CautareBinara2(1, n, val);
}
fin.close();
fout.close();
}