w STL to tak no może nie optymalnie
#include <iostream>
#include <set>
#include <list>
using namespace std;
int main() {
std::list<int> l1= {1,5,8,37,3,5,54,9,2};
std::list<int> l2= {1,25,8,27,3,5,4,99,2,10,12};
std::list<int> l3= {1,75,8,7,3,25,54,9,2,55};
std::list<int> l4= {1,65,8,7,3,5,4,49,2};
std::list<int> lconcat;
int licz = 0;
while(
l1.begin()!=l1.end()||
l2.begin()!=l2.end()||
l3.begin()!=l3.end()||
l4.begin()!=l4.end()
) {
std::multiset<int> s;
if(l1.begin()!=l1.end()){
s.insert(*l1.begin());
l1.pop_front();
}
if(l2.begin()!=l2.end()) {
s.insert(*l2.begin());
l2.pop_front();
}
if(l3.begin()!=l3.end()) {
s.insert(*l3.begin());
l3.pop_front();
}
if(l4.begin()!=l4.end()) {
s.insert(*l4.begin());
l4.pop_front();
}
for(auto &x:s)lconcat.push_back(x);
}
for(const auto &x:lconcat )cout<<x<<'\n';
return 0;
}