Pagini recente » Cod sursa (job #1832663) | Cod sursa (job #1112794) | Cod sursa (job #666942) | Cod sursa (job #3201690) | Cod sursa (job #760259)
Cod sursa(job #760259)
#include <fstream>
unsigned int search0 (const unsigned int v [ ], const unsigned int key, unsigned int begin, unsigned int end)
{
unsigned int middle;
while (begin <= end)
{
middle = (begin + end) >> 1;
if (v[middle] <= key)
begin = middle + 1;
else
end = middle - 1;
}
middle = (begin + end) >> 1;
if (v[middle] > key)
--middle;
if (v[middle] == key)
return middle + 1;
return -1;
}
unsigned int search1 (const unsigned int v [ ], const unsigned int key, unsigned int begin, unsigned int end)
{
unsigned int middle;
while (begin < end)
{
middle = (begin + end) >> 1;
if (v[middle] <= key)
begin = middle + 1;
else
end = middle;
}
middle = (begin + end) >> 1;
if (v[middle] > key)
--middle;
return middle + 1;
}
unsigned int search2 (const unsigned int v [ ], const unsigned int key, unsigned int begin, unsigned int end)
{
unsigned int middle;
while (begin < end)
{
middle = (begin + end) >> 1;
if (v[middle] < key)
begin = middle + 1;
else
end = middle;
}
middle = (begin + end) >> 1;
if (v[middle] < key)
++middle;
return middle + 1;
}
int main (void)
{
unsigned int n;
std::ifstream input("cautbin.in");
input >> n;
unsigned int *v(new unsigned int [n]), *it(v), *end(v + n);
do
{
input >> *it;
++it;
}
while (it < end);
--n;
unsigned int m;
input >> m;
char option;
unsigned int result, number;
std::ofstream output("cautbin.out");
do
{
input >> option >> number;
if (option == '0')
result = search0(v,number,0,n);
else if (option == '1')
result = search1(v,number,0,n);
else
result = search2(v,number,0,n);
if (result == -1)
output << "-1";
else
output << result;
output.put('\n');
--m;
}
while (m);
delete [ ] v;
input.close();
output.close();
return 0;
}