program IntervalOverlap;
type
Interval = record
startTime: Integer;
endTime: Integer;
end;
var
intervals: array of Interval;
// Comparison function for sorting intervals by start time
function CompareIntervals(const a, b: Interval): Integer;
begin
if a.startTime < b.startTime then
CompareIntervals := -1
else if a.startTime > b.startTime then
CompareIntervals := 1
else
CompareIntervals := 0;
end;
// Simple bubble sort (Pascal does not have std::sort)
procedure SortIntervals(var arr: array of Interval);
var
i, j: Integer;
temp: Interval;
begin
for i := 0 to High(arr) - 1 do
for j := 0 to High(arr) - i - 1 do
if CompareIntervals(arr[j], arr[j+1]) > 0 then
begin
temp := arr[j];
arr[j] := arr[j+1];
arr[j+1] := temp;
end;
end;
function HasOverlap(var arr: array of Interval): Boolean;
var
i: Integer;
begin
if Length(arr) = 0 then
begin
HasOverlap := True;
Exit;
end;
// Sorting is essential because once intervals are ordered by
// start time, any overlap can only occur between adjacent intervals.
SortIntervals(arr);
// (5,9), (11,12), (15,17)
// (5,9) and (11,12) → 11 < 9? No
// (11,12) and (15,17) → 15 < 12? No
// The loop compares each interval with the one before it.
for i := 1 to High(arr) do
begin
if arr[i].startTime < arr[i-1].endTime then
begin
HasOverlap := False; // Overlap found
Exit;
end;
end;
HasOverlap := True; // No overlap
end;
var
result: Boolean;
begin
SetLength(intervals, 3);
intervals[0].startTime := 11; intervals[0].endTime := 12;
intervals[1].startTime := 5; intervals[1].endTime := 9;
intervals[2].startTime := 15; intervals[2].endTime := 17;
result := HasOverlap(intervals);
if result then
writeln('There are NO overlapping intervals')
else
writeln('There ARE overlapping intervals');
end.
(*
run:
There are NO overlapping intervals
*)