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

Задача . E. Две команды


В ряд выстроены \(n\) студентов. Два тренера набирают две команды — первый тренер выбирает первую команду, а второй тренер выбирает вторую команду.

Умение программировать \(i\)-го студента равно целому числу \(a_i\). Все умения программировать различны и лежат в отрезке от \(1\) до \(n\).

Сначала первый тренер выбирает себе студента с максимальным умением программировать среди всех студентов, не взятых в какую-либо команду, а также \(k\) студентов, стоящих ближе всего слева от него и \(k\) студентов, стоящих ближе всего справа от него (если слева или справа стоит меньше, чем \(k\) студентов, все они будут взяты). Все выбранные студенты покидают ряд и присоединяются к первой команде. Затем второй тренер делает такой же ход (но все студенты, выбранные им, присоединяются ко второй команде). Затем опять первый тренер делает такой же ход, и так далее. Это продолжается до тех пор, пока есть хотя бы один студент, стоящий в ряду.

Ваша задача — определить, какие студенты будут взяты в первую команду, а какие будут взяты во вторую команду.

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество студентов и значение, определяющее отрезок выбранных студентов соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) равно умению программировать \(i\)-го студента. Гарантируется, что все умения программировать различны.

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

Выведите строку, состоящую из \(n\) символов; \(i\)-й символ должен быть равен 1, если \(i\)-й студент присоединится к первой команде и 2 в ином случае.

Примечание

В первом тестовом примере первый тренер выберет студента на позиции \(3\) и ряд станет пустым (все студенты пойдут в первую команду).

Во втором тестовом примере первый тренер выберет студента на позиции \(4\) и ряд превратится в \([2, 1]\) (студенты с умениями программировать \([3, 4, 5]\) пойдут в первую команду). Затем второй тренер выберет студента на позиции \(1\) и ряд станет пустым (и студенты с умениями программировать \([1, 2]\) пойдут во вторую команду).

В третьем тестовом примере первый тренер выберет студента на позиции \(1\) и ряд превратится в \([1, 3, 5, 4, 6]\) (студенты с умениями программировать \([2, 7]\) пойдут в первую команду). Затем второй тренер выберет студента на позиции \(5\) и ряд превратится в \([1, 3, 5]\) (студенты с умениями программировать \([4, 6]\) пойдут во вторую команду). Затем первый тренер выберет студента на позиции \(3\) и ряд превратится в \([1]\) (студенты с умениями программировать \([3, 5]\) пойдут в первую команду). И затем второй тренер выберет оставшегося студента (и студент с умением программировать \(1\) пойдет во вторую команду).

В четвертом тестовом примере первый тренер выберет студента на позиции \(3\) и ряд превратится в \([2, 1]\) (студенты с умениями программировать \([3, 4, 5]\) пойдут в первую команду). Затем второй тренер выберет студента на позиции \(1\) и ряд станет пустым (и студенты с умениями программировать \([1, 2]\) пойдут во вторую команду).


Примеры
Входные данныеВыходные данные
1 5 2
2 4 5 3 1
11111
2 5 1
2 1 3 5 4
22111
3 7 1
7 2 1 3 5 4 6
1121122
4 5 1
2 4 5 3 1
21112

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

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