IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача про точки и отрезки
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  1  +


Точки и отрезки
(Время: 2 сек. Память: 16 Мб Сложность: 62%)
Дано N отрезков на числовой прямой и M точек на этой же прямой. Для каждой из данных точек определите, скольким отрезкам она принадлежит. Точка x считается принадлежащей отрезку с концами a и b, если выполняется двойное неравенство min(a, b) <= x <= max(a, b).

Входные данные

Первая строка входного файла INPUT.TXT содержит два целых числа N – число отрезков и M – число точек (1 <= N, M <= 10^5). В следующих N строках по два целых числа ai и bi – координаты концов соответствующего отрезка. В последней строке M целых чисел – координаты точек. Все числа во входном файле не превосходят по модулю 10^9.

Выходные данные

В выходной файл OUTPUT.TXT выведите M чисел – для каждой точки количество отрезков, в которых она содержится.

ПРИМЕРЫ
3 2
0 5
-3 2
7 10
1 6
ответ 2 0

1 3
-10 10
-100 100 0
ответ 0 0 1

Моя идея проста: сначала сортируем точки по координате, затем точки с одинаковой координатой сортируем по типу
К сожалению, этот вариант не проходит автоматическую систему проверки по времени (~+0,5сек) sad.gif
Самого теста у меня нет
Вероятно, надо прикрутить упорядочивание по типу точки в процедуру сортировки по координате, но я не представляю, как это сделать...
А может ещё какой-то вариант есть?
Времени у меня как всегда впритык unsure.gif

program Project1;

type
tip=(_left,_none,_right);
point=record x,n,c:longint; t:tip end;
mas=array [1..300000]of point;
var
a,b:mas;
f:text;
i,n,m,k,j:longint;
t:point;

procedure quicksort(var a: mas; Lo,Hi: integer);
procedure sort(l,r: integer);
var
i,j: integer;
x,y:point;
begin
i:=l; j:=r; x := a[(r+l) div 2];
repeat
while a[i].x<x.x do i:=i+1;
while x.x<a[j].x do j:=j-1;
if i<=j then
begin
if a[i].x > a[j].x then
begin
y:=a[i]; a[i]:=a[j]; a[j]:=y
end;
i:=i+1; j:=j-1
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r)
end;
begin
sort(Lo,Hi)
end;

procedure Tquicksort(var a: mas; Lo,Hi: integer);
procedure sort(l,r: integer);
var
i,j: integer;
x,y:point;
begin
i:=l; j:=r; x := a[(r+l) div 2];
repeat
while a[i].t<x.t do i:=i+1;
while x.t<a[j].t do j:=j-1;
if i<=j then
begin
if a[i].t > a[j].t then
begin
y:=a[i]; a[i]:=a[j]; a[j]:=y
end;
i:=i+1; j:=j-1
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r)
end;
begin
sort(Lo,Hi)
end;

begin
assign(f,'input.txt');
reset(f);
readln(f,n,m);
k:=1;
for I := 1 to n do {читаем отрезки}
begin
readln(f,a[k].x,a[k+1].x);
a[k].t:=_left; a[k+1].t:=_right;
inc(k,2)
end;
for I := 1 to m do {читаем точки}
begin
read(f,a[k].x);
a[k].t:=_none;
a[k].n:=i;
inc(k)
end;
close(f);
quicksort(a,1,k-1); {сортируем все точки по координате}
for i := 1 to k - 2 do
if a[i].x=a[i+1].x then {находим последовательность точек с одинаковой координатой...}
begin
j:=i+1;
while a[i].x=a[j].x do
inc(j);
tquicksort(a,i,j-1) {...и сортируем её по типу: сначала должны идти _left, затем _none, затем _right}
end;
j:=0;
for I := 1 to k-1 do {считаем количество вхождений точки в отрезки}
case a[i].t of
_none:begin a[i].c:=j; b[a[i].n]:=a[i] end;
_left:inc(j);
_right:dec(j)
end;
assign(f,'output.txt');
rewrite(f);
for i := 1 to m do
if b[i].n>0 then write(f,b[i].c,' ');
close(f)
end.

Заранее спасибо

Сообщение отредактировано: c-ch -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
c-ch   Задача про точки и отрезки   5.04.2009 14:25
c-ch   ещё один вариант сделал: разводим начала и концы о…   5.04.2009 23:59
Lapp   Вроде и сортировка и поиск достаточно быстрые, но …   6.04.2009 5:36
c-ch   конкретно этот кусок я исправил ветвлением, спасиб…   6.04.2009 10:53
finasteride tablets 5mg where to   Statutaria Kamagra Vendite   1.09.2021 7:24
azithromycin 500mg next day deli   Comprar Cialis Generico Por Internet   19.12.2021 14:06
volvo   c-ch Насколько я вижу, у тебя вся проблема - в реа…   6.04.2009 14:37
c-ch   время улучшилось на пару сотых секунды :) но этого…   6.04.2009 20:22
volvo   Да? У меня время уменьшилось с 8 секунд изначальны…   6.04.2009 20:33
passat   Координаты отрезков записываем в массив. Держим вс…   6.04.2009 20:54
passat   Точнее, даже так. Все сливаем в один массив. ВВоди…   6.04.2009 21:34
c-ch   я лишь привёл цифры, которые дала система проверки…   6.04.2009 20:43
c-ch   конечно :) в первом посте именно такой вариант :) …   6.04.2009 21:46
volvo   Может, ты все-таки дашь ссылку на сервер, на котор…   6.04.2009 21:55
c-ch   пожалуйста: http://acmp.ru/index.asp?main=task…   6.04.2009 21:57
volvo   Я ничего с этим сервером не понимаю :wacko: Была …   7.04.2009 20:13
volvo   Бррр... Да, сам виноват, посчитал, что в паре коор…   8.04.2009 0:43
c-ch   да, спасибо :смайлик_с_пивом:   9.04.2009 18:08


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 13.09.2025 6:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name