using System.Collections.Generic;
private static List<Interval> insert(List<Interval> input, Interval newInterval) {
List<Interval> merged = new List<Interval>();
for(int index = 0; index < (input.Count); index++) {
if (newInterval.start > input[index].end) {
indexToInsert = index + 1;
indexToInsert = (index - 1 > 0) ? (index -1) : 0;
for (int index =0; index < input.Count; index++) {
if (index < indexToInsert) {
merged.Add(input[index]);
else if (index == indexToInsert) {
if (newInterval.start < input[index].start) {
merged.Add(new Interval(a.start, a.end));
merged.Add(new Interval(a.start, b.end));
Interval lastMerged = merged.Last();
Interval current = input[index];
if (current.start <= lastMerged.end) {
if (current.end > lastMerged.end) {
lastMerged.end = current.end;
public static void Main()
List<Interval> input = new List<Interval>();
input.Add(new Interval(1, 3));
input.Add(new Interval(5, 7));
input.Add(new Interval(8, 12));
Console.Write("Intervals after inserting the new interval: ");
foreach (Interval interval in insert(input, new Interval(4, 6)))
Console.Write("[" + interval.start + "," + interval.end + "] ");
input = new List<Interval>();
input.Add(new Interval(1, 3));
input.Add(new Interval(5, 7));
input.Add(new Interval(8, 12));
Console.Write("Intervals after inserting the new interval: ");
foreach (Interval interval in insert(input, new Interval(4, 10)))
Console.Write("[" + interval.start + "," + interval.end + "] ");
input = new List<Interval>();
input.Add(new Interval(2, 3));
input.Add(new Interval(5, 7));
Console.Write("Intervals after inserting the new interval: ");
foreach (Interval interval in insert(input, new Interval(1, 4)))
Console.Write("[" + interval.start + "," + interval.end + "] ");
public Interval(int start, int end) {