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

Задача . E. Передача последовательности по сети


Задача

Темы: дп *1600

Последовательность \(a\) передается по сети следующим образом:

  1. последовательность \(a\) разбивают на отрезки (каждый элемент последовательности принадлежит ровно одному отрезку, каждый отрезок — это подряд идущие элементы последовательности);
  2. рядом с каждым отрезком, либо слева, либо справа от него, записывают длину этого отрезка;
  3. полученная последовательность \(b\) передаётся по сети.

Например, нужно было передать последовательность \(a = [1, 2, 3, 1, 2, 3]\). Допустим, что её разбили на отрезки следующим образом: \([\color{red}{1}] + [\color{blue}{2, 3, 1}] + [\color{green}{2, 3}]\). Тогда могли получиться следующие последовательности:

  • \(b = [1, \color{red}{1}, 3, \color{blue}{2, 3, 1}, \color{green}{2, 3}, 2]\),
  • \(b = [\color{red}{1}, 1, 3, \color{blue}{2, 3, 1}, 2, \color{green}{2, 3}]\),
  • \(b = [\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, 2, \color{green}{2, 3}]\),
  • \(b = [\color{red}{1}, 1,\color{blue}{2, 3, 1}, 3, \color{green}{2, 3}, 2]\).

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

Задана последовательность \(b\). Могла ли последовательность \(b\) быть передана по сети? Другими словами, существует ли такая последовательность \(a\), что при преобразовании \(a\) для передачи по сети могла получиться последовательность \(b\)?

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

В первой строке входных данных дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк.

В первой строке входных данных дано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер последовательности \(b\).

Во второй строке входных данных дано \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)) — сама последовательность \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

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

Для каждого набора входных данных в отдельной строке выведите:

  • YES, если последовательность \(b\) могла быть передана по сети, то есть если последовательность \(b\) могла быть получена из некоторой последовательности \(a\) для передачи \(a\) по сети.
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных последовательность \(b\) могла быть получена из последовательности \(a = [1, 2, 3, 1, 2, 3]\) со следующим разбиением: \([\color{red}{1}] + [\color{blue}{2, 3, 1}] + [\color{green}{2, 3}]\). Последовательность \(b\): \([\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, 2, \color{green}{2, 3}]\).

Во втором наборе входных данных последовательность \(b\) могла быть получена из последовательности \(a = [12, 7, 5]\) со следующим разбиением: \([\color{red}{12}] + [\color{green}{7, 5}]\). Последовательность \(b\): \([\color{red}{12}, 1, 2, \color{green}{7, 5}]\).

Во третьем наборе входных данных последовательность \(b\) могла быть получена из последовательности \(a = [7, 8, 9, 10, 3]\) со следующим разбиением: \([\color{red}{7, 8, 9, 10, 3}]\). Последовательность \(b\): \([5, \color{red}{7, 8, 9, 10, 3}]\).

В четвертом наборе входных данных не существует такой последовательности \(a\), что при изменении \(a\) для передачи по сети могла получиться последовательность \(b\).


Примеры
Входные данныеВыходные данные
1 7
9
1 1 2 3 1 3 2 2 3
5
12 1 2 7 5
6
5 7 8 9 10 3
4
4 8 6 2
2
3 1
10
4 6 2 1 9 4 9 3 4 2
1
1
YES
YES
YES
NO
YES
YES
NO

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

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