Олимпиадный тренинг

Задача . C. Столкновения роботов


\(n\) роботов ездят по координатной оси OX. На этой оси также есть две стены: одна в координате \(0\), другая в координате \(m\).

\(i\)-й робот начинает в целой координате \(x_i~(0 < x_i < m)\) и движется либо влево (в сторону \(0\)), либо вправо со скоростью \(1\) в секунду. Никакие два робота не начинают в одной координате.

Когда робот достигает стены, он мгновенно разворачивается и продолжает свою поездку в противоположном направлении с той же скоростью.

Когда несколько роботов встречаются в одной целой координате, они сталкиваются и взрываются. Как только робот взорвался, он больше не сталкивается с другими роботами. Обратите внимание, что если роботы встретятся в нецелой координате, то ничего не случится.

Для каждого робота проверьте, взорвется ли он когда-нибудь, и выведите время взрыва, если да, и \(-1\) в противном случае.

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

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 3 \cdot 10^5\); \(2 \le m \le 10^8\)) — количество роботов и координата правой стены.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 < x_i < m\)) — начальные координаты каждого робота.

В третьей строке каждого набора входных данных записаны \(n\) символов 'L' или 'R' — начальные направления роботов ('L' означает влево, а 'R' означает вправо).

Все координаты \(x_i\) в наборе входных данных различны.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

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

На каждый набор входных данных выведите \(n\) целых чисел — для \(i\)-го робота выведите время взрыва, если он взорвется, и \(-1\) в противном случае.

Примечание

Изображение секунд \(0, 1, 2\) и \(3\) для первого набора входных данных:

Обратите внимание, что роботы \(2\) и \(3\) не сталкиваются, потому что они встречаются в одной точке \(2.5\), которая не является целой.

После секунды \(3\) робот \(6\) просто ездит бесконечно, потому что нет робота, с которым он мог бы столкнуться.


Примеры
Входные данныеВыходные данные
1 5
7 12
1 2 3 4 9 10 11
R R L L R R R
2 10
1 6
R R
2 10
1 3
L L
1 10
5
R
7 8
6 1 7 2 3 5 4
R L R L L L L
1 1 1 1 2 -1 2 
-1 -1 
2 2 
-1 
-1 2 7 3 2 7 3

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя