Возникает следующая проблема:
Самый престижный спортивный клуб в одном городе имеет ровно N членов. Каждый из его членов силен и красив. Точнее, i-й член этого клуба (члены которого были пронумерованы к тому времени, когда они вошли в клуб) имеет силу S i и красоту B i. Поскольку это очень престижный клуб, его члены очень богаты и, следовательно, необыкновенные люди, поэтому они часто очень ненавидят друг друга. Строго говоря, i-й член клуба г-н Х ненавидит j-го члена клуба Mr Y, если S i ≤ S j и B i ≥ B j или если S i ≥ S j и B i ≤ B j (если оба свойства Mr X больше соответствующих свойств Mr Y, он даже не замечает его, с другой стороны, если оба его свойства меньше, он очень уважает г-на Y).
Чтобы отпраздновать новый 2003 год, администрация клуба планирует организовать вечеринку. Однако они опасаются, что если два человека, которые ненавидят друг друга, одновременно посещают вечеринку, после выпивки или двух они начнут драку. Поэтому не нужно приглашать двух людей, которые ненавидят друг друга. С другой стороны, чтобы сохранить престиж клуба на соответствующем уровне, администрация хочет пригласить как можно больше людей.
Будучи единственным среди администрации, который не боится прикоснуться к компьютеру, вы должны написать программу, в которой будет узнать, кого пригласить на вечеринку.
Ввод
* Первая строка входного файла содержит целое число N - количество членов клуба. (2 ≤ N ≤ 100 000). Следующие N строк содержат по два числа - S i и B i соответственно (1 ≤ S i, B i ≤ 109). *
Выход
В первой строке выходного файла напечатайте максимальное количество людей, которые могут быть приглашены на вечеринку. На второй строке вывод N целых чисел - числа членов, которые должны быть приглашены в произвольном порядке. Если существует несколько решений, выведите любой из них.
Пример теста (ов)
Ввод
4 1 1 1 2 2 1 2 2
Выход
2 1 4
Я пытаюсь решить проблему, но сложность моего алгоритма O (N ^ 2), и поскольку 2 <= N <= 100000, необходимо улучшить алгоритм. Я решал проблему с использованием алгоритма динамического программирования с наибольшим ростом подпоследовательности, который имеет сложность O (N ^ 2). Кто-нибудь знает, как улучшить алгоритм?