import java.util.*;
class Interval{
int start;
int end;
Interval(int a, int b){
start=a;
end=b;
}
}
public class MyDemo{
public ArrayList<Interval> merge (ArrayList<Interval> intervals){
ArrayList<Interval> res=new ArrayList<Interval>();
if (intervals == null || intervals.isEmpty())
return res;
Comparator<Interval> comparator = new Comparator<Interval>(){
public int compare (Interval a, Interval b){
if (a.start < b.start) return -1 ;
else if (a.start>b.start) return 1 ;
else {
if (a.end < b.end) return -1 ;
else if (a.end > b.end) return 1 ;
else return 0 ;
}
}
};
Collections.sort(intervals,comparator);
for (int i=0 ;i< intervals.size();i++){
Interval current = intervals.get (i);
if (res.isEmpty())
{
res.add(current);
}else {
Interval last=res.get (res.size()-1 );
if (last.end>=current.start){
last.end=Math.max(last.end,current.end);
}else {
res.add(current);
}
}
}
return res;
}
public static void main (String[] args){
ArrayList<Interval> testArrayList = new ArrayList<Interval>();
testArrayList.add(new Interval(1 ,5 ));
testArrayList.add(new Interval(6 ,10 ));
testArrayList.add(new Interval(4 ,6 ));
testArrayList.add(new Interval(15 ,20 ));
ArrayList<Interval> result=new ArrayList<Interval>();
MyDemo demo=new MyDemo();
result = demo.merge (testArrayList);
for (int i=0 ;i<result.size();i++)
{
Interval tmpI = result.get (i);
System.out .println("[" +tmpI.start+"," +tmpI.end+"]" );
}
}
}
c++
#include <bits/stdc++.h>
using namespace std ;
const int N = 0 ;
struct Interval {
int start;
int end;
Interval() : start(0 ), end(0 ) { }
Interval(int s, int e) : start(s), end(e) { }
};
class Solution {
private :
vector <Interval> insert(vector <Interval> &intervals, Interval newInterval) {
auto it = intervals.begin();
auto it_head = it;
while (it != intervals.end()) {
if (newInterval.end < it->start) {
it = intervals.erase(it_head, it);
intervals.insert(it, newInterval);
return intervals;
} else if (newInterval.start > it->end) {
it++;
it_head++;
} else {
newInterval.start = min(newInterval.start, it->start);
newInterval.end = max(newInterval.end, it->end);
it++;
}
}
if (it_head != it)
it = intervals.erase(it_head, it);
intervals.insert(intervals.end(), newInterval);
return intervals;
}
public :
vector <Interval> merge(vector <Interval> &intervals) {
vector <Interval> res;
for (auto &i : intervals)
insert(res, i);
return res;
}
};
int main() {
int a, b, n;
vector <Interval> itv;
Solution s;
cin >> n;
while (n--) {
cin >> a >> b;
itv.push_back(Interval(a, b));
}
itv = s.merge(itv);
for (auto &i : itv)
cout << i.start << ' ' << i.end << endl;
return 0 ;
}