#P15585. [KTSC 2026] 绝妙区间 2 / Wonderful Interval 2

[KTSC 2026] 绝妙区间 2 / Wonderful Interval 2

题目描述

英宇有两个长度为 NN 的数组 A,BA,B。对于任意 0iN10\le i\le N-1,有 A[i]B[i]A[i]\le B[i]

一个区间 [l,r][l,r]绝妙区间,当且仅当其满足以下所有条件:

  • l,rl,r 为整数;
  • 0lrN10\le l\le r\le N-1
  • 通过重复以下操作,可以将 [A[l],,A[r]][A[l],\cdots,A[r]] 变换为 [B[l],,B[r]][B[l],\cdots,B[r]]
    • 令此时的数组为 X=[X[0],X[1],,X[rl]]X=[X[0],X[1],\cdots,X[r-l]]
    • 选择两个不同的整数 i,ji,j0i,jrl0\le i,j\le r-l)满足 X[i]=X[j]X[i]=X[j],然后令 X[i]X[i]+1X[i]\gets X[i]+1

英宇好奇哪些区间是绝妙区间。具体地,英宇给定了 QQ 个询问,编号 0Q10\sim Q-1,这些询问用两个长度为 QQ 的数组 L,RL,R 来表示。

询问 jj0jQ10\le j\le Q-1)表示,查询区间 [L[j],R[j]][L[j],R[j]] 是否是绝妙区间。

写一个程序回答英宇的询问。

实现细节

这是一道函数式交互题。你不必,也不应实现 main 函数。

你应当实现以下的函数:

vector<int> array_operation(vector<int> A, vector<int> B, vector<int> L, vector<int> R)
  • A,BA,B:大小为 NN 的整数数组。
  • L,RL,R:大小为 QQ 的整数数组。
  • 返回一个大小为 QQ 的整数数组 SS。若 [L[j],R[j]][L[j],R[j]] 是绝妙区间,S[j]S[j] 应为 11,否则为 000jQ10\le j\le Q-1)。
  • 该函数被调用恰好一次。

你的源代码中不应调用任何输入/输出函数。

输入格式

示例评测程序的输入格式如下:

  • 11 行:NN QQ
  • 对于所有 0iN10 \le i \le N - 1
    • 2+i2 + i 行:A[i]A[i] B[i]B[i]
  • 对于所有 0iQ10 \le i \le Q - 1
    • 2+N+i2 + N + i 行:L[i]L[i] R[i]R[i]

输出格式

示例评测程序按以下格式打印答案:

  • 11 行:array_operation 的返回值
4 3
2 2
1 1
1 3
2 3
0 1
0 3
1 3

1 1 0

5 5
1 2
2 3
1 1
2 4
1 2
0 2
0 4
1 3
1 4
2 3

1 1 0 1 0

提示

数据范围

  • 1N,Q2500001\le N,Q\le 250\, 000
  • 1A[i]B[i]1091\le A[i]\le B[i]\le 10^90iN10\le i\le N-1);
  • 0L[j]R[j]N10\le L[j]\le R[j]\le N-10jQ10\le j\le Q-1);

子任务

编号 得分 限制
11 9 9 N,Q100N,Q\le 100B[i]100B[i]\le 100
22 7 7 N,Q2000N,Q\le 2\, 000A[i]=1A[i]=1
33 1616 A[i]=1A[i]=1
44 1010 N,Q2000N,Q\le 2\, 000
55 4 4 B[i]2B[i]\le 2
66 1313 B[i]100B[i]\le 100
77 3131 B[i]250000B[i]\le 250\, 000
88 1010 无额外限制

样例

样例 1

考虑以下调用: array_operation([2, 1, 1, 2], [2, 1, 3, 3], [0, 0, 1], [1, 3, 3])

  • [00, 11] 是一个绝妙区间。这是因为两个数组 A[0]A[0], A[1]A[1]B[0]B[0], B[1]B[1] 是相等的。
  • [00, 33] 是一个绝妙区间。这是因为可以通过执行以下操作,使 [22, 11, 11, 22] 变为 [22, 11, 33, 33]。
    • 选择 i=3i = 3j=0j = 0 并执行操作。操作后数组变为 [22, 11, 11, 33]。
    • 选择 i=2i = 2j=1j = 1 并执行操作。操作后数组变为 [22, 11, 22, 33]。
    • 选择 i=2i = 2j=0j = 0 并执行操作。操作后数组变为 [22, 11, 33, 33]。
  • [11, 33] 不是一个绝妙区间。可以证明,无论如何执行操作,都无法使 [11, 11, 22] 变为 [11, 33, 33]。

因此,函数应返回 [11, 11, 00]。

样例 2

考虑以下调用: array_operation([1, 2, 1, 1], [2, 3, 1, 4, 2], [0, 0, 1, 1, 2], [2, 4, 3, 4, 3])

在所有区间中,绝妙区间为 [00, 22], [00, 33], [00, 44], [11, 44], [22, 22]。因此,函数应返回 [11, 11, 00, 11, 00]。