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

Задача . Logical Moos


Задача

Темы:

У Фермера Джона есть булевское выражение длиной в \(N\) слов (\(1 \leq N < 2 \cdot 10^5\), \(N\) нечётное). Только \(\texttt{true}\) or \(\texttt{false}\) появляются на нечётных позициях, и только \(\texttt{and}\) и \(\texttt{or}\) появляются на чётных позициях.

Фраза вида \(x\text{ OPERATOR }y\), где \(x\) и \(y\) или \(\texttt{true}\) или \(\texttt{false}\), а \(\text{OPERATOR}\) есть \(\texttt{and}\) или \(\texttt{or}\), вычисляется следующим образом:

  • \(x\texttt{ and }y\): Это вычисляется в true если оба \(x\) и \(y\) true, иначе в false.
  • \(x\texttt{ or }y\): Это вычисляется в true если или \(x\) или \(y\) true, иначе в false.

При вычислении выражения ФД действует так: Аналогично C++, \(\texttt{and}\) имеет более высокий приоритет чем \(\texttt{or}\). Более подробно: для вычисления выражения повторяется следующий шаг пока в выражении не останется ровно одно слово.

  1. Если выражение содержит \(\texttt{and}\), выбирается любой из них и фраза, окружающая его, заменяется её вычислением.
  2. Иначе, выражение содержит \(\texttt{or}\). Выбирается любой из них и фраза, окружающая его, заменяется её вычислением.

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

У ФД есть \(Q\) \((1 \leq Q \leq 2 \cdot 10^5)\) запросов. В каждом запросе она даёт Вам два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq N\), \(l\) и \(r\) оба нечётные), и удаляет сегмент от ключевого слова \(l\) до ключевого слова \(r\) включительно. Он хочет заменить удалённый сегмент одним \(\texttt{true}\) или \(\texttt{false}\) так, чтобы оставшееся выражение вычислялось к определённому булевскому значению. Помогите ФД определить, возможно ли это.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) и \(Q\).

Следующая строка содержит \(N\) слов, корректное булевское выражение.

Последующие \(Q\) строк содержат два целых числа \(l\) и \(r\), и строку \(\texttt{true}\) или \(\texttt{false}\), обозначающую, что он хочет, чтобы оставшееся после удаления выражение вычислилось к этому значению.

ФОРМАТ ВЫВОДА (на экран / stdout):

Выедите строку длины \(Q\), где \(i\)-ый символ есть Y если i-ый запрос возможно выполнить и N в противном случае.


Примеры
Входные данныеВыходные данные
1 5 7
false and true or true
1 1 false
1 3 true
1 5 false
3 3 true
3 3 false
5 5 false
5 5 true
NYYYNYY

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

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