loj#P4819. 「KTSC 2025 R2」精彩区间

「KTSC 2025 R2」精彩区间

注意事项

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

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

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

题目描述

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

志虎手中有两个长度为 NN 的整数数组 AABB,且对于任意 0iN10 \leq i \leq N-1,总有 A[i]B[i]A[i] \leq B[i]

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

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

志虎很好奇,这样的精彩区间到底有多少个。具体来说,他的问题由 QQ 个编号从 00Q1Q-1 的提问组成,用长度为 QQ 的数组 L1,R1,L2,R2L1, R1, L2, R2 表示。第 jj (0jQ1)(0 \leq j \leq Q-1) 个问题是:满足 L1[j]lR1[j]L1[j] \leq l \leq R1[j]L2[j]rR2[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,其中对于所有 0jQ10 \leq j \leq Q-1S[j]S[j] 是第 jj 个问题的答案。
  • 该函数只会被调用一次。

样例

假设 N=3N=3Q=3Q=3A=[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[00]=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=00l2,0r20 \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=10l0,0r20 \leq l \leq 0, 0 \leq r \leq 2,有 [0,0],[0,2][0,0], [0,2],共 22 个。
    • j=2j=21l2,0r11 \leq l \leq 2, 0 \leq r \leq 1,有 [1,1][1,1],共 11 个。

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

数据范围与提示

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

  • 1N,Q2500001 \leq N, Q \leq 250000
  • 对于所有 0iN10 \leq i \leq N-1109A[i]B[i]109-10^{9} \leq A[i] \leq B[i] \leq 10^{9}
  • 对于所有 0jQ10 \leq j \leq Q-10L1[j]R1[j]N10 \leq L1[j] \leq R1[j] \leq N-1
  • 对于所有 0jQ10 \leq j \leq Q-10L2[j]R2[j]N10 \leq L2[j] \leq R2[j] \leq N-1

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

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

示例评测程序

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

  • 11 行:N QN\ Q
  • 2+i2+i (0iN1)(0 \leq i \leq N-1) 行:A[i] B[i]A[i]\ B[i]
  • N+2+jN+2+j (0jQ1)(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[Q1]S[0]\ S[1]\ \cdots\ S[Q-1]

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