Zastosowałem się do swoich rad i nie działało. To napisałem taki kod, też nie działa ale już lepiej (może mniej niż n^2)
#include <iostream>
#include <map>
#include <vector>
#include <ctime>
#include <random>
#include <iomanip>
#include <functional>
#include <algorithm>
#include <iterator>
#include <numeric>
using namespace std;
int main()
{
////////////////////////////////////////////////
uniform_int_distribution<int> d1 ( 1, 100 );
uniform_int_distribution<int> d2 ( 1, 10 );
default_random_engine gen ( time ( NULL ) );
vector <int> vec(40);
for (int i=0; i< vec.size()-1;i+=2) {
vec[i]=d1(gen); vec[i+1]=vec[i]+d2(gen);
}
for (int i=0; i< vec.size()-1;i+=2)
std::cout<<vec[i]<<' ' <<vec[i+1]<<'\n';
////////////////////////////////////////////////////
std::multimap<int,char> m;
std::multimap<int,char> mout;
for (int i=0; i< vec.size()-1;i+=2){
// m[vec[i]]='('; //nie działa
// m[vec[i+1]]=')'; //nie działa
m.insert(std::pair<int,char>{vec[i], '('});
m.insert(std::pair<int,char>{vec[i+1], ')'});
}
for(auto &x:m ) {cout<<setw(3)<<x.second<<' '; }
cout<<endl;
for(auto &x:m ) {cout<<setw(3)<<x.first<<' '; }
cout<<endl;
int i=0;
//////////////////////////////////////////////////////
for(auto it=m.begin();it!=m.end();it++){
mout.insert(*it);
do {
if (it->second=='('){i++;}
else i--;
// cout<<i<<endl;
if (i==0) break;
it++;
}while (1);
mout.insert(*it);
}
for(auto &x:mout ) {
if (x.second == '(') cout<<setw(3)<<x.second<<x.first<<',';
else cout<<setw(3)<<x.first<<x.second<<';'; }
return 0;
}
PS. Sorki za wypowiedz.