std::vector<std::pair<size_t, size_t>> merge_private_blocks(std::vector<std::pair<size_t, size_t>> src, std::vector<std::pair<size_t, size_t>> dst) {
std::vector<std::pair<size_t, size_t>> result;
std::vector<std::pair<size_t, size_t>> merge_private_blocks(std::vector<std::pair<size_t, size_t>> src, std::vector<std::pair<size_t, size_t>> dst) {
std::vector<std::pair<size_t, size_t>> result;
while(i_src < src.size() && i_dst < dst.size()) {
std::pair<size_t, size_t> block;
if(src[i_src].second <= dst[i_dst].first) {
while(i_src < src.size() && i_dst < dst.size()) {
std::pair<size_t, size_t> block;
if(src[i_src].second <= dst[i_dst].first) {