program density (input,output); const MAXINTERVALS = 200; LEFTV = 0; RIGHTV = 1; type PointType = real; SegmentType = record value: PointType; edge: integer; end; var segments: array[1..MAXINTERVALS*2] of SegmentType; numIntervals: integer; intervalDensity: integer; procedure ReadIntervals(var numIntervals: integer); var i,j: integer; left,right: PointType; begin j := 1; readln(numIntervals); for i := 1 to numIntervals do begin readln(left, right); segments[j].value := left; segments[j].edge := LEFTV; segments[j+1].value := right; segments[j+1].edge := RIGHTV; j := j + 2; end; end; procedure SortIntervals(numIntervals: integer); var i,j: integer; temp: SegmentType; begin for i := 1 to numIntervals*2-1 do begin for j := numIntervals*2 downto i+1 do begin if (segments[j].value < segments[j-1].value) then begin temp := segments[j]; segments[j] := segments[j-1]; segments[j-1] := temp; end else if (segments[j].value = segments[j-1].value) and (segments[j].edge = RIGHTV) then begin temp := segments[j]; segments[j] := segments[j-1]; segments[j-1] := temp; end; end; end; end; procedure Count(numIntervals: integer; var intervalDensity: integer); var currCount: integer; maxCount: integer; i: integer; begin currCount := 0; maxCount := 0; for i := 1 to numIntervals*2 do begin if (segments[i].edge = LEFTV) then begin currCount := currCount + 1; if (currCount > maxCount) then maxCount := currCount; end else currCount := currCount - 1; end; intervalDensity := maxCount; end; begin ReadIntervals(numIntervals); SortIntervals(numIntervals); Count(numIntervals,intervalDensity); writeln('Maximum density: ', intervalDensity:3); end.