With reverse iterators, you need only some little adjustments to the code shown in the link you provided:
template<class RandomAccessIterator1, typename RandomAccessIterator2, class Compare>
typename std::iterator_traits<RandomAccessIterator1>::value_type
nsmallest_iter(RandomAccessIterator1 firsta, RandomAccessIterator1 lasta,
RandomAccessIterator2 firstb, RandomAccessIterator2 lastb,
size_t n,
Compare less) {
...
}
and
int v = nsmallest_iter(
a, a + SIZE(a),
std::reverse_iterator<int*>(b + SIZE(b)), std::reverse_iterator<int*>(b),
SIZE(a)+SIZE(b)-1-i,
std::greater<int>());