QOJ.ac

QOJ

Time Limit: 4 s Memory Limit: 1024 MB Total points: 100 Difficulty: [show] Hackable ✓

#13084. Абсолютная защита

统计

Сяо Q играет с компьютером в пошаговую карточную игру под названием «Абсолютная защита».

У Сяо Q есть колода из $n$ карт, содержащая два типа карт: карты атаки и карты защиты. В начале игры Сяо Q берёт с верха колоды $k \ (1 \le k \le n)$ карт как стартовую руку, затем он сыграет с компьютером несколько раундов сражений.

В начале каждого раунда Сяо Q берёт с верха колоды $2$ карты. Особый случай — если в колоде осталась только $1$ карта, он берёт только 1 карту. Один раунд состоит из двух ходов:

  • В первом ходу Сяо Q — атакующий, а компьютер — защитник;
  • Во втором ходу Сяо Q — защитник, а компьютер — атакующий.

В каждом ходу атакующий обязан сыграть одну атакующую карту из руки для атаки, защитник обязан сыграть одну защитную карту для защиты. Игрок, который не может сыграть нужную карту, немедленно проигрывает.

У компьютера бесконечное количество карт атаки и защиты, то есть в каждом ходу он всегда может сыграть нужную карту. Чтобы уравнять шансы, Сяо Q может использовать особое умение: когда он является защитником, он может сыграть атакующую карту из руки как защиту. Это умение можно использовать только раз в $3$ раунда, то есть после его использования в одном раунде, оно становится недоступным в следующих двух раундах.

Цель Сяо Q по правилам игры — выжить под яростными атаками компьютера, то есть достичь состояния, при котором колода полностью опустела после окончания какого-либо раунда. В частности, если колода пуста уже в начале игры, Сяо Q немедленно выигрывает. Сяо Q хочет узнать минимальное стартовое число карт $k$, необходимое для достижения цели.

Сяо Q считает эту задачу слишком простой, поэтому он добавил $q$ операций изменения. В $i$-й операции $(1 \le i \le q)$ задаётся положительное число $x_i$, указывающее, что тип $x_i$-й карты (считая от верха к низу колоды) изменяется: атакующая карта превращается в защитную, а защитная — в атакующую. Вам нужно вычислить минимальное значение $k$ до и после каждой операции, чтобы Сяо Q достиг цели.

Формат ввода

Вход читается из стандартного потока ввода.

Эта задача содержит несколько наборов тестов.

Первая строка содержит два неотрицательных целых числа $c, t$, обозначающих номер тестпоинта и количество наборов тестов. $c = 0$ означает, что тестпоинт — это пример.

Затем следуют $t$ наборов тестов. Для каждого набора:

Первая строка содержит два неотрицательных целых числа $n, q$ — размер колоды и количество изменений.

Вторая строка содержит строку длины $n$: $s_1 \dots s_n$, обозначающую колоду от верха к низу. Здесь $s_i = 0$ означает, что $i$-я карта — атакующая, $s_i = 1$ — защитная.

Далее следуют $q$ строк: $i + 2$-я строка $(1 \le i \le q)$ содержит целое число $x_i$ — индекс изменяемой карты (от верха к низу).

Формат вывода

Выводите в стандартный поток вывода.

Для каждого набора тестов выведите строку из $q + 1$ положительных целых чисел $k_0, k_1, \dots, k_q$, где $k_0$ — ответ для начальной колоды, $k_i$ — ответ после $i$-й операции. Эти значения обозначают минимальное стартовое число карт, необходимое для победы.


Пример

Ввод

0 3
5 1
01010
4
7 0
0001000
10 0
0001010000

Вывод

1 1
3
2

Пояснение

В этом примере 3 набора тестов.

Для первого:

  • Начальная колода — $01010$. Если взять $k = 1$, возможна следующая стратегия:

    • Рука: ${0}$;
    • Берём 2 карты, играем по одной атакующей и защитной — рука остаётся ${0}$;
    • Ещё 2 карты — снова по одной атакующей и защитной — рука ${0}$, колода пуста.

    Минимальное $k$ — это $1$, значит $k_0 = 1$.

  • После изменения колода — $01000$. Аналогично, при $k = 1$ можно выжить, используя специальное умение.

    Значит $k_1 = 1$.

Для второго набора:

При $k = 3$:

  • Рука: ${0, 0, 0}$;
  • Игра продолжается по правилам и с использованием умения — колода опустеет.

Доказывается, что $k < 3$ не даст возможности победить, значит ответ — $3$.

Для третьего набора:

При $k = 2$:

  • Рука: ${0, 0}$;
  • В процессе игры с умением можно опустошить колоду.

Доказывается, что $k < 2$ недостаточно. Ответ — $2$.


Пример 2

См. файлы ex_2.in и ex_2.ans в каталоге загрузки — они соответствуют условиям тестпоинта $2$.


Пример 3

См. ex_3.in и ex_3.ans — соответствуют условиям тестпоинтов $5\sim7$.


Пример 4

См. ex_4.in и ex_4.ans — соответствуют условиям тестпоинтов $9, 10$.


Пример 5

См. ex_5.in и ex_5.ans — соответствуют условиям тестпоинта $11$.


Пример 6

См. ex_6.in и ex_6.ans — соответствуют условиям тестпоинтов $12\sim14$.


Ограничения

Пусть $N, Q$ — сумма $n$ и $q$ во всех тестах. Для всех тестов выполнено:

  • $1 \le t \le 10^{4}$;
  • $1 \le n \le 2 \times 10^{5}$, $N \le 5 \times 10^{5}$;
  • $0 \le q \le 2 \times 10^{5}$, $Q \le 5 \times 10^{5}$;
  • $s_i \in {0, 1}$;
  • $1 \le x_i \le n$.
Тест $n \leq$ $q \leq$ $N, Q \leq$ Особые свойства
$1 $ $20$ $20$ $60$ Нет
$2 $ $10^2$ $10^2$ $10^3$ Нет
$3 $ $3{,}000$ $3{,}000$ $10^4$ Нет
$4 $ $3{,}000$ $3{,}000$ $10^4$ Нет
$5 $ $10^5$ $0$ $3 \times 10^5$ Нет
$6 $ $10^5$ $0$ $3 \times 10^5$ Нет
$7 $ $10^5$ $0$ $3 \times 10^5$ Нет
$8 $ $2 \times 10^5$ $200$ $5 \times 10^5$ Нет
$9 $ $10^5$ $10^5$ $3 \times 10^5$ AB
$10$ $10^5$ $10^5$ $3 \times 10^5$ AB
$11$ $10^5$ $10^5$ $3 \times 10^5$ AC
$12$ $10^5$ $10^5$ $3 \times 10^5$ AD
$13$ $10^5$ $10^5$ $3 \times 10^5$ AD
$14$ $10^5$ $10^5$ $3 \times 10^5$ AD
$15$ $10^5$ $10^5$ $3 \times 10^5$ E
$16$ $10^5$ $10^5$ $3 \times 10^5$ E
$17$ $10^5$ $10^5$ $3 \times 10^5$ E
$18$ $10^5$ $10^5$ $3 \times 10^5$ Нет
$19$ $10^5$ $10^5$ $3 \times 10^5$ Нет
$20$ $2 \times 10^5$ $2 \times 10^5$ $5 \times 10^5$ Нет

Особые свойства:

  • A: $s_i$ равномерно случайны и независимы;
  • B: все $x_i$ различны и $s_{x_i} = 1$;
  • C: все $x_i$ различны и $s_{x_i} = 0$;
  • D: $x_i$ равномерно случайны и независимы;
  • E: $1 \le k_i \le 45$ для всех $0 \le i \le q$.
About Issues

We understand that our problem archive is not perfect. If you find any issues with the problem, including the statement, scoring configuration, time/memory limits, test cases, etc.

You may use this form to submit an issue regarding the problem. A problem moderator will review your issue and proceed it properly.

STOP! Before you submit an issue, please READ the following guidelines:

  1. This is not a place to publish a discussion, editorial, or requests to debug your code. Your issue will only be visible by you and problem moderators. Other users will not be able to view or reply your issues.
  2. Do not submit duplicated issues. If you have already submitted one, please wait for an moderator to review it. Submitting multiple issues will not speed up the review process and might cause your account to be banned.
  3. Issues must be filed in English or Chinese only.
  4. Be sure your issue is related to this problem. If you need to submit an issue regarding another problem, contest, category, etc., you should submit it to the corresponding page.

Active Issues 0

No issues in this category.

Closed/Resolved Issues 0

No issues in this category.