using System;
using System.Collections.Generic;
using System.Linq;
public class Range
{
public int Start { get; set; }
public int End { get; set; }
public Range(int start, int end) {
Start = start;
End = end;
}
}
class Program
{
static List<Range> MergeRanges(List<Range> ranges)
{
// Sort by Start
var sorted = ranges.OrderBy(r => r.Start).ToList();
var merged = new List<Range>();
foreach (var r in sorted) {
if (merged.Count == 0 || r.Start > merged[merged.Count - 1].End) {
merged.Add(new Range(r.Start, r.End));
}
else {
var last = merged[merged.Count - 1];
last.End = Math.Max(last.End, r.End);
}
}
return merged;
}
static void Main()
{
var ranges = new List<Range>
{
new Range(302, 447),
new Range(488, 489),
new Range(121, 234),
new Range(200, 421),
new Range(140, 354)
};
var result = MergeRanges(ranges);
foreach (var r in result) {
Console.WriteLine("(" + r.Start + ", " + r.End + ")");
}
}
}
/*
run:
(121, 447)
(488, 489)
*/