CF2111G.Divisible Subarrays

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

本题为交互题。

对于一个长度为 mm 的数组 aa,如果满足以下两个条件之一,则称其为“可分数组”:

  • 存在一个下标 ii(1≤i<m1 \le i < m)和一个整数 xx,使得对于所有下标 jj(j≤ij \le i),都有 aj≤xa_j \le x,并且对于所有下标 kk(k>ik > i),都有 ak>xa_k > x。
  • 存在一个下标 ii(1≤i<m1 \le i < m)和一个整数 xx,使得对于所有下标 jj(j≤ij \le i),都有 aj>xa_j > x,并且对于所有下标 kk(k>ik > i),都有 ak≤xa_k \le x。

现在给定一个 11 到 nn 的排列 pp。你需要高效地回答如下询问:对于排列的区间 [l,r][l, r],即 pl,pl+1,…,prp_l, p_{l+1}, \dots, p_r,该子数组是否为“可分数组”?

本题采用交互模式,询问会以每组 1010 个的形式给出,只有在输出完当前组所有答案后,才能获得下一组询问。

输入格式

第一行包含一个整数 nn(2≤n≤2×1052 \le n \le 2 \times 10^5),表示排列的长度。

第二行包含 nn 个整数 pip_i(1≤pi≤n1 \le p_i \le n),表示排列本身。

第三行包含一个整数 qq(10≤q≤106,q mod 10=010 \le q \le 10^6, q \bmod 10 = 0),表示询问的数量。

接下来的 qq 行,每行包含两个整数 ll 和 rr(1≤l<r≤n1 \le l < r \le n),表示一次询问的区间参数。

输出格式

对于每个询问,若该区间对应的子数组为“可分数组”,输出字符串 "YES";否则输出 "NO"。

每组 1010 个询问输出完毕后,需输出换行并刷新输出缓冲区。否则可能会因“空闲限制超时”而被判为错误。刷新缓冲区的方法如下:

  • C++:fflush(stdout) 或 cout.flush()
  • Java:System.out.flush()
  • Pascal:flush(output)
  • Python:stdout.flush()
  • 其它语言请参考相关文档

你必须在第 1010、2020、3030、…… 个询问(即编号为 1010 的倍数的询问)输出后刷新缓冲区,然后才能读取下一组询问。

输入输出样例

  • 输入#1

    7
    4 2 3 6 1 5 7
    20
    1 2
    1 3
    1 4
    1 5
    1 6
    2 3
    2 4
    2 5
    2 6
    3 4
    3 5
    3 6
    4 5
    4 6
    5 6
    1 7
    2 7
    3 7
    4 7
    5 7

    输出#1

    YES
    YES
    YES
    YES
    NO
    YES
    YES
    YES
    NO
    YES
    YES
    NO
    YES
    YES
    YES
    YES
    YES
    YES
    YES
    YES

说明/提示

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页