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

Постройте массив

Постройте массив

Али с нуля любит создавать новый массив. Сегодня он хочет построить массив $a_1, a_2, ..., a_n$ из $n$ элементов. Изначально он имеет массив $b_1, b_2, ..., b_n$, содержащий $n$ нулей, и может применять к этому массиву только следующие операции: \begin{itemize} \item $MAX(l, r, x)$: Это означает, что $b_i = max(b_i, x)$ для всех $i$, удовлетворяющих условию $l \le i \le r$. Разумеется, в этой операции должно выполняться условие $1 \le l \le r \le n$. \end{itemize} Теперь Али думает над вопросом, за какое минимальное количество операций он сможет получить массив $a$. Помогите Али найти минимальное количество операций и любую последовательность таких операций. \InputFile Первая строка содержит одно целое число $n~(1 \le n \le 10^5)$. Следующая строка содержит $n$ целых чисел $a_1, a_2, ..., a_n~(0 \le a_i \le 10^9)$. \OutputFile Выведите минимальное количество операций, необходимое для получения массива 𝑎 в первой строке. Обозначим это количество через $m$. Выведите любую такую последовательность операций в следующих 𝑚 строках в формате $l~r~x$. \Examples \textbf{Первый тест.} Посмотрите, как меняется массив по мере применения операций: \begin{lstlisting}[language=C++] b[] = 0 0 0 0 0 0 0 0 b[] = 1 1 1 0 0 0 0 0 b[] = 1 7 1 0 0 0 0 0 b[] = 1 7 1 7 7 0 0 0 b[] = 1 7 1 7 7 2 2 2 b[] = 1 7 1 7 7 3 2 2 b[] = 1 7 1 7 7 3 2 3 \end{lstlisting} Невозможно получить данный массив менее чем за $6$ операций. Могут быть и другие правильные варианты последовательности операций. \textbf{Второй тест.} \begin{lstlisting}[language=C++] b[] = 0 0 0 0 0 0 0 b[] = 0 0 1 1 1 1 0 b[] = 0 0 1 3 3 1 0 \end{lstlisting}
Лимит времени 1 секунда
Лимит использования памяти 128 MiB
Входные данные #1
8
1 7 1 7 7 3 2 3
Выходные данные #1
6
1 8 1
2 2 7
4 8 2
4 6 3
4 5 7
8 8 3
Входные данные #2
7
0 0 1 3 3 1 0
Выходные данные #2
2
3 6 1
4 5 3
Источник 2024, Азербайджан, Республиканская Олимпиада по Информатике, Полуфинал, Февраль 18