#HK4819. 「KTSC 2025 R2」精彩区间

「KTSC 2025 R2」精彩区间

注意事项

在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:

  • C++(标准为 C++ 17 及以上)

请在提交源代码前添加 #include "maxsum.h"。

题目描述

题目译自 2025년도 국제정보올림피아드 대표학생 선발고사 - 2차 선발고사 T2 「멋진 구간」

志虎手中有两个长度为 NN 的整数数组 AA 和 BB,且对于任意 0≤i≤N−10 \leq i \leq N-1,总有 A[i]≤B[i]A[i] \leq B[i]。

我们把满足以下条件的区间 [l,r][l, r] 定义为精彩区间:

  • ll 和 rr 是整数。
  • 0≤l≤r≤N−10 \leq l \leq r \leq N-1。
  • 存在一个长度为 NN 的整数数组 CC,满足:
    • 对于所有 0≤i≤N−10 \leq i \leq N-1,A[i]≤C[i]≤B[i]A[i] \leq C[i] \leq B[i]。
    • 对于所有 0≤s≤e≤N−10 \leq s \leq e \leq N-1,∑i=lrC[i]≥∑i=seC[i]\sum_{i=l}^{r} C[i] \geq \sum_{i=s}^{e} C[i]。也就是说,C[l…r]C[l \ldots r] 是 CC 的最大和子数组(即所有子数组中元素和最大的子数组)。

志虎很好奇,这样的精彩区间到底有多少个。具体来说,他的问题由 QQ 个编号从 00 到 Q−1Q-1 的提问组成,用长度为 QQ 的数组 L1,R1,L2,R2L1, R1, L2, R2 表示。第 jj (0≤j≤Q−1)(0 \leq j \leq Q-1) 个问题是:满足 L1[j]≤l≤R1[j]L1[j] \leq l \leq R1[j] 且 L2[j]≤r≤R2[j]L2[j] \leq r \leq R2[j] 的精彩区间 [l,r][l, r] 有多少个?

你的任务是编写程序回答志虎的这些问题。

实现细节

你需要实现以下函数:

std::vector<long long> maxsum(std::vector<int> A, std::vector<int> B,
std::vector<int> L1, std::vector<int> R1, std::vector<int> L2, std::vector<int> R2)
  • A, B:长度为 NN 的整数数组。
  • L1, R1, L2, R2:长度为 QQ 的整数数组。
  • 函数需返回一个长度为 QQ 的整数数组 SS,其中对于所有 0≤j≤Q−10 \leq j \leq Q-1,S[j]S[j] 是第 jj 个问题的答案。
  • 该函数只会被调用一次。

样例

假设 N=3N=3,Q=3Q=3,A=[−1,−1,−1]A=[-1,-1,-1],B=[2,−1,2]B=[2,-1,2],L1=[0,0,1]L1=[0,0,1],R1=[2,0,2]R1=[2,0,2],L2=[0,0,0]L2=[0,0,0],R2=[2,2,1]R2=[2,2,1]。

评测程序调用:

maxsum([-1,-1,-1], [2,-1,2], [0,0,1], [2,0,2], [0,0,0], [2,2,1])
  • [0,0][0,0] 是精彩区间。例如,取 C=[1,−1,0]C=[1,-1,0],C[0…0]=1C[0 \ldots 0] = 1 是最大和子数组。
  • [0,1][0,1] 不是精彩区间。因为 C[1]=−1C[1] = -1,无论 C[0]C[0] 如何取,C[0]>C[0]+C[1]C[0] > C[0] + C[1],[0,1][0,1] 无法成为最大和子数组。
  • 通过类似分析,可证明精彩区间只有 [0,0],[0,2],[1,1],[2,2][0,0], [0,2], [1,1], [2,2]。
  • 回答问题:
    • j=0j=0:0≤l≤2,0≤r≤20 \leq l \leq 2, 0 \leq r \leq 2,有 [0,0],[0,2],[1,1],[2,2][0,0], [0,2], [1,1], [2,2],共 44 个。
    • j=1j=1:0≤l≤0,0≤r≤20 \leq l \leq 0, 0 \leq r \leq 2,有 [0,0],[0,2][0,0], [0,2],共 22 个。
    • j=2j=2:1≤l≤2,0≤r≤11 \leq l \leq 2, 0 \leq r \leq 1,有 [1,1][1,1],共 11 个。

函数应返回 [4,2,1][4,2,1]。

数据范围与提示

对于所有输入数据,满足:

  • 1≤N,Q≤2500001 \leq N, Q \leq 250000
  • 对于所有 0≤i≤N−10 \leq i \leq N-1,−109≤A[i]≤B[i]≤109-10^{9} \leq A[i] \leq B[i] \leq 10^{9}。
  • 对于所有 0≤j≤Q−10 \leq j \leq Q-1,0≤L1[j]≤R1[j]≤N−10 \leq L1[j] \leq R1[j] \leq N-1。
  • 对于所有 0≤j≤Q−10 \leq j \leq Q-1,0≤L2[j]≤R2[j]≤N−10 \leq L2[j] \leq R2[j] \leq N-1。

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 55 1≤N≤5001 \leq N \leq 500
22 1111 1≤N≤50001 \leq N \leq 5000
33 4545 Q=1Q = 1;L1[0]=L2[0]=0L1[0] = L2[0] = 0;R1[0]=R2[0]=N−1R1[0] = R2[0] = N-1
44 1212 对于所有 0≤j≤Q−10 \leq j \leq Q-1,L1[j]=R1[j],L2[j]=R2[j]L1[j] = R1[j], L2[j] = R2[j]
55 2727 无附加限制

示例评测程序

示例评测程序接收以下格式的输入:

  • 第 11 行:N QN\ Q
  • 第 2+i2+i (0≤i≤N−1)(0 \leq i \leq N-1) 行:A[i] B[i]A[i]\ B[i]
  • 第 N+2+jN+2+j (0≤j≤Q−1)(0 \leq j \leq Q-1) 行:L1[j] R1[j] L2[j] R2[j]L1[j]\ R1[j]\ L2[j]\ R2[j]

输出格式如下:

  • 第 11 行:设 maxsum 返回值为 SS,则输出 S[0] S[1] ⋯ S[Q−1]S[0]\ S[1]\ \cdots\ S[Q-1]

请注意,示例评测程序可能与实际评测程序有所不同。