O(logN) search implemented using STL set void insert_interval(set>& intervals, const pair& newint){ set last; for(auto& r : intervals){ last.insert(r.second); } auto beg = last.lower_bound(newint.first); auto end = intervals.lower_bound(make_pair(newint.second, 0)); if( (*end).first == newint.second ) ++end; if( beg == end ){ intervals.insert(newint); }else{ auto it = intervals.begin() + beg - last.begin(); auto tmp = make_pair( min((*it).first, newint.first), max((*(end-1)).second, newint.second) ); intervals.erase(it, end); intervals.insert(tmp); } }