Pagini recente » Cod sursa (job #1873168) | Cod sursa (job #1493744) | Cod sursa (job #2106960) | Cod sursa (job #1704041) | Cod sursa (job #903314)
Cod sursa(job #903314)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int BinarySearch0(int nr);
int BinarySearch1(int nr);
int BinarySearch2(int nr);
vector<int> ar;
int ar_size;
int main()
{
fin >> ar_size;
ar.resize(ar_size);
for (int i = 0; i < ar_size; ++i)
fin >> ar[i];
int nrq; fin >> nrq;
int type, nr;
for (int i = 0; i < nrq; ++i)
{
fin >> type >> nr;
if ( type == 0 )
fout << BinarySearch0(nr) + 1 << '\n';
else
if ( type == 1 )
fout << BinarySearch1(nr) + 1 << '\n';
else
if ( type == 2 )
fout << BinarySearch2(nr) + 1 << '\n';
}
fin.close();
fout.close();
return 0;
}
int BinarySearch1(int nr)
{
int mid;
int left, right;
left = 0; right = ar_size - 1;
while (left < right)
{
mid = ( left + right ) / 2;
if (ar[mid] <= nr)
left = mid + 1;
else
right = mid;
}
mid = (left + right) / 2;
if (ar[mid] > nr)
--mid;
return mid;
}
int BinarySearch2(int nr)
{
int mid;
int left, right;
left = 0, right = ar_size - 1;
while ( left < right )
{
mid = ( left + right ) / 2;
if ( ar[mid] < nr )
left = mid + 1;
else
right = mid;
}
mid = ( left + right ) / 2;
if ( ar[mid] < nr )
++mid;
return mid;
}
int BinarySearch0(int nr)
{
int mid;
int left, right;
left = 0, right = ar_size - 1;
while (left <= right)
{
mid = (left + right) / 2;
if (ar[mid] <= nr)
left = mid + 1;
else
right = mid - 1;
}
mid = (left + right) / 2;
if (ar[mid] > nr)
mid--;
if (ar[mid] == nr)
return mid;
return -1;
}