def max_elements_by_with_block(arr, &block)
      max_elements, arr = first_elements_and_residue(arr, &block)
      return [] if arr.empty? && max_elements.nil?
      arr.each do |e|
        current_max_elements_value = yield(max_elements.first)