I was to solve one question on hackerrank related to lower bound in C++. My code was able to pass all the test cases which had no time limit but failed in all time bound test cases. You can find the hackerrank question from this link:
Below is my code. Please tell me how I can optimize it.
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> v;
int elementCount = 0, queryCount = 0, tempElement = 0;
std::cin >> elementCount;
for(int i=0; i<elementCount; ++i)
{
std::cin >> tempElement;
v.push_back(tempElement);
}
std::vector<int>::iterator elementPosition;
const std::vector<int>::iterator midElement = v.begin() + v.size()/2;
std::cin >> queryCount;
for(int q=0; q<queryCount; ++q)
{
std::cin >> tempElement;
if(tempElement <= *midElement)
{
elementPosition = find(v.begin(), midElement+1, tempElement);
if(elementPosition == (midElement+1))
{
elementPosition = lower_bound(v.begin(), midElement, tempElement);
std::cout << "No " << (elementPosition-v.begin())+1 << std::endl;
}
else
{
std::cout << "Yes " << (elementPosition-v.begin())+1 << std::endl;
}
}
else
{
elementPosition = find(midElement+1, v.end(), tempElement);
if(elementPosition != v.end())
{
std::cout << "Yes " << (elementPosition-v.begin())+1 << std::endl;
}
else
{
elementPosition = lower_bound(midElement+1, v.end(), tempElement);
std::cout << "No " << (elementPosition-v.begin())+1 << std::endl;
}
}
}
return 0;
}