Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- double straightforward( std::vector< int >& v1, std::vector< int >& v2 )
- {
- if( v1.empty() && v2.empty() )
- {
- return NAN;
- }
- size_t i = v1.size();
- size_t j = v2.size();
- const size_t n = i + j;
- size_t m = n / 2 + 1;
- int mid[ 2 ]{};
- int mid_idx = 0;
- for( ; i && j && m; --m )
- {
- auto& a = v1[ i - 1 ];
- auto& b = v2[ j - 1 ];
- if( a >= b )
- {
- mid[ mid_idx ] = a;
- --i;
- }
- else
- {
- mid[ mid_idx ] = b;
- --j;
- }
- mid_idx = 1 - mid_idx;
- }
- if( m )
- {
- auto& v = i ? v1 : v2;
- auto k = i ? i : j;
- if( m == 1 )
- {
- mid[ mid_idx ] = v[ k - 1 ];
- mid_idx = 1 - mid_idx;
- }
- else
- {
- k -= m;
- mid[ 1 - mid_idx ] = v[ k ];
- mid[ mid_idx ] = v[ k + 1 ];
- }
- }
- if( n % 2 == 1 )
- {
- return mid[ 1 - mid_idx ];
- }
- return ( mid[ 0 ] + mid[ 1 ] ) / 2.0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement