const max=10000; {найбільша кількість інтервалів} type c=record a,b: word; end; {a і b - кінці інтервалу} var a,b: integer; {кінці відрізка} j,k,l,n: word; {лічильники} o: text; {файли: вхідний і вихідний} i: array[0..max] of c; {масив інтервалів} {Рекурсивна процедура quick впорядкування інтервалів швидким методом Хоара за неспаданням правого кінця, при однакових правих кінцях - за незростанням лівого кінця} procedure quick (left,right: word); var l,r: word; BEGIN l:=left+random(right-left+1); r:=right; i[0]:=i[l]; repeat while (li[0].b) or (i[r].a<=i[0].a) and (i[r].b=i[0].b)) do dec(r); i[l]:=i[r]; i[r]:=i[0]; while (l=i[0].a) and (i[l].b=i[0].b)) do inc(l); i[r]:=i[l]; i[l]:=i[0]; until l=r; if left=a do dec(k); {вибір першого інтервалу} write(o, i[k].a,' ',i[k].b); {запис першого інтервалу} while i[k].b<=b do {вибір і запис наступних інтервалів} begin j:=n; while i[j].a>i[k].b do dec(j); k:=j; write(o,' ',i[k].a,' ',i[k].b) end; writeln(o); {запис ознаки кінця рідка для дотримання стандарту} close(o); {закриття вихідного файлу для перенесення його наповнення з оперативної пам'яті у поточну теку} END.