eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Наибольшая цепь

Наибольшая цепь

Определим на двух тройках \textbf{a} = \textbf{(x_a, y_a, z_a)} и \textbf{b} = \textbf{(x_b, y_b, z_b)} частичный порядок следующим образом: \includegraphics{https://static.e-olymp.com/content/5a/5a861682d837318146ce1884ab101821464f0a34.jpg} \textbf{a ≺ b x_a} < \textbf{x_b} и \textbf{y_a} < \textbf{y_b} и \textbf{z_a} < \textbf{z_b} По заданному набору троек следует найти наибольшую возрастающую последовательность \textbf{a_1} ≺ \textbf{a_2} ≺ ... ≺ \textbf{a_k}. \InputFile Состоит из нескольких тестов, каждый из которых содержит набор троек в следующем формате. \textbf{m n A B} \textbf{x_1 y_1 z_1} \textbf{x_2 y_2 z_2} \textbf{...} \textbf{x_m y_m z_m} Первая строка содержит \textbf{m}, \textbf{n}, \textbf{A }и \textbf{B}, все значения \textbf{x_i}, \textbf{y_i} и \textbf{z_i} (\textbf{i} = \textbf{1}, ..., \textbf{m}) являются неотрицательными целыми. Каждый тест содержит множество из \textbf{m + n} троек. Тройки от \textbf{p_1} до \textbf{p_m} задаются в явном виде, \textbf{i}-ая тройка \textbf{p_i} равна (\textbf{x_i}, \textbf{y_i}, \textbf{z_i}). Остальные \textbf{n }троек задаются параметрами \textbf{A} и \textbf{B} и генерируются при помощи следующей процедуры. \textbf{int a} = \textbf{A, b} = \textbf{B, C} = \textbf{~(1<<31), M }=\textbf{ (1<<16)-1;} \textbf{int r() \{} \textbf{a} = 3\textbf{6969 * (a & M) + (a >> 16);} \textbf{b }= \textbf{18000 * (b & M) + (b >> 16);} \textbf{return (C & ((a << 16) + b)) \% 1000000;} \textbf{\}} Совершается \textbf{3n }вызовов \textbf{r()}, каждый из которых генерирует числа \textbf{x_\{m+1\}}, \textbf{y_\{m+1\}}, \textbf{z_\{m+1\}}, \textbf{x_\{m+2\}}, \textbf{y_\{m+2\}}, \textbf{z_\{m+2\}}, ..., \textbf{x_\{m+n\}}, \textbf{y_\{m+n\}} и \textbf{z_\{m+n\}} в указанном порядке. Считайте, что \textbf{1 }≤ \textbf{m + n }≤ \textbf{3}×\textbf{10^5}, \textbf{1 }≤ \textbf{A}, \textbf{B }≤ \textbf{2^16} и \textbf{0 }≤ \textbf{x_k}, \textbf{y_k}, \textbf{z_k} < \textbf{10^6} для \textbf{1 }≤ \textbf{k }≤ \textbf{m + n}. Последняя строка содержит четыре нуля. Общая сумма \textbf{m + n }для всех тестов не превосходит \textbf{2}×\textbf{10^6}. \OutputFile Для каждого теста вывести длину наибольшей возрастающей последовательности троек из заданного множества. Если \textbf{p_i1} ≺ \textbf{p_i2} ≺ ... ≺\textbf{ p_ik} наибольшая, то ответ равен \textbf{k}.
Ліміт часу 60 секунд
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
6 0 1 1
0 0 0
0 2 2
1 1 1
2 0 2
2 2 0
2 2 2
5 0 1 1
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
10 0 1 1
3 0 0
2 1 0
2 0 1
1 2 0
1 1 1
1 0 2
0 3 0
0 2 1
0 1 2
0 0 3
0 10 1 1
0 0 0 0
Вихідні дані #1
3
5
1
3
Джерело ACM International Collegiate Programming Contest, Asia Regional Contest, Aizu, 2013–11–24