给定一个长度为 n 的数组 a ,我们定义一个区间 [l,r] 是好的,当且仅当这个区间可以分成两个非空的子序列,元素之间相对顺序不变,使得这两个子序列都是严格单调递增子序列。 对于给出多次询问,你需要问答区间是不是好区间。
第一行一个整数 T(1≤ T≤ 20000) ,表示有 T 次询问。 对于每次询问,第一行两个整数 n,q(2≤ n,q≤ 2× 10^5) ,第二行 n 个整数 a_i(1≤ a_i≤ 10^9) ,表示数组 a 。 接下来 q 行,每行两个整数 l,r(1≤ l< r≤ n) ,表示询问的区间。 单个测试文件保证 n 和 q 的和均不超过 2× 10^5 。
对于每次询问,输出一行,如果区间是好区间,输出 YES ,否则输出 NO 。
2 4 2 1 2 3 3 1 3 1 2 5 3 4 5 4 5 3 1 4 1 5 2 4
YES YES YES NO YES
考点:数组 · 单调栈
数据规模 n ≤ 200000 | 限制 5 秒 / 1024MB | 标准输入输出
推荐方向:栈
后进先出的结构天然适合处理嵌套、匹配与「最近的更大/更小」问题。
思路框架(栈 通法 · 非本题专属)
实现要点:Python 用 list 当栈(append/pop);判断栈空再取栈顶。
复杂度:时间 O(n) | 空间 O(n)
该范式的通法易错点
对照本题
样例 1
2 / 4 2 / 1 2 3 3 / 1 3 / 1 2 / 5 3 / 4 5 4 5 3 / 1 4 / 1 5 / 2 4YES / YES / YES / NO / YES解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2025年春招-美团-技术岗笔试;2025年春招-美团-算法岗笔试。