Cod sursa(job #797816)
#include <fstream>
#include <vector>
using namespace std;
vector<int> elements;
int zero(int query)
{
int left, middle, right;
left = -1;
right = elements.size();
while(right - left > 1)
{
middle = left + (right - left)/2;
if(query < elements[middle])
right = middle;
else
left = middle;
}
if(elements[left] == query)
return left + 1;
return -1;
}
int one(int query)
{
int left, middle, right;
left = -1;
right = elements.size();
while(right - left > 1)
{
middle = left + (right - left)/2;
if(query < elements[middle])
right = middle;
else
left = middle;
}
if(query <= elements[left])
return left + 1;
return -1;
}
int two(int query)
{
int left, middle, right;
left = -1;
right = elements.size();
while(right - left > 1)
{
middle = left + (right - left)/2;
if(query <= elements[middle])
right = middle;
else
left = middle;
}
if(query >= elements[right])
return right + 1;
return -1;
}
int main()
{
ifstream in("cautbin.in");
int N, M;
in >> N;
elements.resize(N);
for(int i = 0; i < N; ++i)
in >> elements[i];
in >> M;
ofstream out("cautbin.out");
for(int i = 0, type, query; i < M; ++i)
{
in >> type >> query;
switch(type)
{
case 0:
out << zero(query) << " ";
break;
case 1:
out << one(query) << " ";
break;
case 2:
out << two(query) << " ";
break;
}
}
in.close();
out.close();
return 0;
}