B4181 [厦门小学生 C++ 2024] 有趣子序列

题目背景

本试题为 2024 年厦门市小学生 C++ 语言**复赛**试题,数据为洛谷自造。 **初赛**为笔试。

题目描述

小唐最近在研究一个长为 $n$ 的 $01$ 字符串 $S$(下标从 $1$ 开始)。 他很喜欢其子区间和子序列,例如:如下表的 $01$ 字符串 $S = \tt{01011010}$。 | $S_1$ | $S_2$ | $S_3$ | $S_4$ | $S_5$ | $S_6$ | $S_7$ | $S_8$ | |:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | $0$ | $1$ | $0$ | $1$ | $1$ | $0$ | $1$ | $0$ | - 子区间 $[2,4]$ 即为:$S_2, S_3, S_4$ 这样一个在原 $S$ 串中连续的一段序列; - 子序列即类如:$S_2, S_4, S_6, S_7$ 这样一个按原 $S$ 串顺序的,可连续、可不连续的序列。 所以,子区间肯定是子序列,但子序列不一定是子区间。 小唐会询问你 $Q$ 次,每次询问给出一个 $S$ 的子区间 $[l,r]$,他想知道是否存在 $S$ 的一个“有趣子序列”,其满足: 1. “有趣子序列”和询问的子区间 $[l,r]$ 相同; 例:如果询问的子区间是 $[2,4]$,其中,子序列 $S_2, S_6, S_7$ 和询问的子区间 $S_2, S_3, S_4$ 中的字符按顺序一一对应相同; 2. “有趣子序列”不是从 $S$ 中选出的一段子区间。 例:子序列 $S_2, S_6, S_7$ 并不是原 $S$ 串中连续的一段序列,即不是原 $S$ 串的一段子区间。 请对于每次询问 $[l,r]$,输出 $\tt{Yes}$ 或 $\tt{No}$,分别表示存在或不存在这样的 “有趣子序列”。

输入格式

**本题有多组数据。** - 第一行一个非负整数 $T$,表示数据组数。 - 接下来 $T$ 组数据,对于每组数据: - 第一行两个非负整数 $n$ 和 $q$,表示字符串长度和询问数。 - 第二行一个 $01$ 字符串 $s$。 - 接下来 $q$ 行,每行两个正整数 $l,r$,表示询问的子区间。

输出格式

对于每组数据: - 对于每个询问,输出一行 $\tt{Yes}$ 或 $\tt{No}$ 表示答案。

说明/提示

### 样例解释 1 - 对于第一组数据,可以选择的子序列下标依次为:不存在,$(1,2,4)$,$(3,4,6)$。 - 对于第二组数据,可以选择的子序列下标依次为:不存在,$(1,3)$。 ### 数据范围 对于所有数据,满足 $1 \leq n \leq 1 \times 10^5$,$1 \leq q \leq 1 \times 10^5$,$1 \leq l\ {\color{red}\leq}\ r \leq n$。 | 数据点编号 | $T\leq$ | $n\leq$ | $q\leq$ | 特殊性质 | |:------------:|:----:|:----:|:----:|:----------:| | $1$ | $100$ | $4$ | $1$ | | | $2$ | $100$ | $10$ | $10$ | | | $3$ | $10$ | $12$ | $100$ | | | $4$ | $10$ | $100$ | $100$ | | | $5, 6$ | $10$ | $1000$ | $1000$ | | | $7$ | $5$ | $1 \times 10^5$| $1 \times 10^5$| $l=1$ | | $8, 9, 10$ | $5$ | $1 \times 10^5$| $1 \times 10^5$| | 特殊性质:$l=1$ 表示子区间左边界为 $1$。