CF1861C Queries for the Array

题目描述

Monocarp 有一个由整数构成的数组 $a$。最开始,这个数组是空的。 Monocarp 对这个数组执行了三种操作: - 选择一个整数,将其添加到数组末尾。每次执行这种操作时,Monocarp 会写下一个字符 $+$; - 移除数组的最后一个元素。每次执行这种操作时,Monocarp 会写下一个字符 $-$。Monocarp 从不会在空数组上执行此操作; - 检查数组是否为非递减排序,即 $a_1 \le a_2 \le \dots \le a_k$,其中 $k$ 是当前数组的元素个数。任何元素个数小于 $2$ 的数组都被认为是有序的。如果数组在执行该操作时是有序的,Monocarp 会写下字符 $1$,否则写下字符 $0$。 现在给定一个长度为 $q$ 的字符串 $s$,由 $0$、$1$、$+$ 和 $-$ 组成。这是 Monocarp 按顺序写下的字符序列。 你需要判断,这个序列是否是可能的,也就是说,Monocarp 是否有可能通过上述操作,写下恰好为 $s$ 的字符序列。

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 每个测试用例包含一行字符串 $s$($1 \le |s| \le 2 \times 10^5$)。该字符串由 $0$、$1$、$+$ 和 $-$ 组成,表示 Monocarp 按顺序写下的字符序列。 输入还满足以下额外约束: - 对于 $s$ 的每一个前缀,字符 $+$ 的数量不少于字符 $-$ 的数量。换句话说,Monocarp 不会在空数组上执行移除操作; - 所有测试用例中 $|s|$ 的总和不超过 $2 \times 10^5$。

输出格式

对于每个测试用例,如果存在一种操作方式使得 Monocarp 写下的字符序列恰好为 $s$,输出 YES,否则输出 NO。 你可以以任意大小写输出答案。

说明/提示

在第一个测试用例中,Monocarp 可以执行如下操作: - 添加整数 $13$; - 添加整数 $37$; - 检查当前数组 $[13, 37]$ 是否为非递减排序(确实有序)。 在第五个测试用例中,Monocarp 可以执行如下操作: - 添加整数 $3$; - 添加整数 $2$; - 检查当前数组 $[3, 2]$ 是否为有序(不是有序的); - 移除最后一个元素; - 添加整数 $3$; - 检查当前数组 $[3, 3]$ 是否为有序(是有序的); - 移除最后一个元素; - 添加整数 $-5$; - 检查当前数组 $[3, -5]$ 是否为有序(不是有序的)。 在示例测试的其他测试用例中,不可能通过上述操作写下 $s$。 由 ChatGPT 4.1 翻译