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

Задача . E2. Массив и отрезки (сложная версия)


Единственное отличие между легкой и сложной версиями — количество элементов в массиве.

Задан массив \(a\), состоящий из \(n\) целых чисел. Значение \(i\)-го элемента массива равно \(a_i\).

Также задан набор из \(m\) отрезков. \(j\)-й отрезок равен \([l_j; r_j]\), где \(1 \le l_j \le r_j \le n\).

Вы можете выбрать какое-то подмножество заданного множества отрезков и уменьшить значения элементов на каждом из выбранных отрезков на единицу (независимо). Например, если изначальный массив \(a = [0, 0, 0, 0, 0]\), а заданные отрезки — \([1; 3]\) и \([2; 4]\), то вы можете выбрать оба из них и массив станет равен \(b = [-1, -2, -2, -1, 0]\).

Вам необходимо выбрать какое-то подмножество заданного множества отрезков (каждый отрезок может быть выбран не более одного раза) таким образом, что если вы примените этот набор отрезков к массиву \(a\) и получите массив \(b\), то значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\) будет максимально возможным.

Заметим, что вы можете выбрать пустое множество.

Если существует несколько возможных ответов, выведите любой.

Если вы программируете на Python, рассмотрите возможность отправки решения на PyPy, а не на Python, когда будете отправлять свой код.

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5, 0 \le m \le 300\)) — длина массива \(a\) и количество отрезков, соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^6 \le a_i \le 10^6\)), где \(a_i\) — значение \(i\)-го элемента массива \(a\).

Следующие \(m\) строк содержат по два целых числа. \(j\)-я из них содержит два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)), где \(l_j\) и \(r_j\) — концы \(j\)-го отрезка.

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

В первой строке выходных данных выведите одно целое число \(d\)максимально возможное значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\), если \(b\) — это массив, полученный применением некоторого поднабора заданных отрезков к массиву \(a\).

Во второй строке выходных данных выведите одно целое число \(q\) (\(0 \le q \le m\)) — количество отрезков, которые вы собираетесь применить.

В третьей строке выведите \(q\) различных целых чисел \(c_1, c_2, \dots, c_q\) в любом порядке (\(1 \le c_k \le m\)) — номера отрезков, которые вы собираетесь применить к массиву \(a\), чтобы значение \(\max\limits_{i=1}^{n}b_i - \min\limits_{i=1}^{n}b_i\) полученного массива \(b\) было максимально возможным.

Если существует несколько возможных ответов, выведите любой.

Примечание

В первом тестовом примере полученный массив \(b\) будет равен \([0, -4, 1, 1, 2]\), таким образом ответ равен \(6\).

Во втором тестовом примере полученный массив \(b\) будет равен \([2, -3, 1, -1, 4]\), таким образом ответ равен \(7\).

В третьем тестовом примере вы не можете ничего сделать, таким образом ответ равен \(0\).


Примеры
Входные данныеВыходные данные
1 5 4
2 -2 3 1 2
1 3
4 5
2 5
1 3
6
2
4 1
2 5 4
2 -2 3 1 4
3 5
3 4
2 4
2 5
7
2
3 2
3 1 0
1000000
0
0

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

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