QOJ.ac

QOJ

Time Limit: 5 s Memory Limit: 1024 MB Total points: 100
[-9]

# 10183. 멋진 구간

Statistics

给定两个长度为 N 的整数数组 AB,且对于任意 0iN1,总有 A[i]B[i]

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

  • lr 是整数。
  • 0lrN1
  • 存在一个长度为 N 的整数数组 C,满足:
    • 对于所有 0iN1A[i]C[i]B[i]
    • 对于所有 0seN1ri=lC[i]ei=sC[i]。也就是说,C[lr]C最大和子数组(即所有子数组中元素和最大的子数组)。

Q 个编号从 0Q1 的提问,用长度为 Q 的数组 L1,R1,L2,R2 表示。第 j (0jQ1) 个问题是:满足 L1[j]lR1[j]L2[j]rR2[j] 的好区间 [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:长度为 N 的整数数组。
  • L1, R1, L2, R2:长度为 Q 的整数数组。
  • 函数需返回一个长度为 Q 的整数数组 S,其中对于所有 0jQ1S[j] 是第 j 个问题的答案。
  • 该函数只会被调用一次。

样例数据

假设 N=3Q=3A=[1,1,1]B=[2,1,2]L1=[0,0,1]R1=[2,0,2]L2=[0,0,0]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] 是精彩区间。例如,取 C=[1,1,0]C[00]=1 是最大和子数组。
  • [0,1] 不是精彩区间。因为 C[1]=1,无论 C[0] 如何取,C[0]>C[0]+C[1][0,1] 无法成为最大和子数组。
  • 通过类似分析,可证明精彩区间只有 [0,0],[0,2],[1,1],[2,2]
  • 回答问题:
    • j=00l2,0r2,有 [0,0],[0,2],[1,1],[2,2],共 4 个。
    • j=10l0,0r2,有 [0,0],[0,2],共 2 个。
    • j=21l2,0r1,有 [1,1],共 1 个。

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

子任务

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

  • 1N,Q250000
  • 对于所有 0iN1109A[i]B[i]109
  • 对于所有 0jQ10L1[j]R1[j]N1
  • 对于所有 0jQ10L2[j]R2[j]N1

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

子任务 分值 附加限制
1 5 1N500
2 11 1N5000
3 45 Q=1L1[0]=L2[0]=0R1[0]=R2[0]=N1
4 12 对于所有 0jQ1L1[j]=R1[j],L2[j]=R2[j]
5 27 无附加限制

样例交互库

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

  • 1 行:N Q
  • 2+i (0iN1) 行:A[i] B[i]
  • N+2+j (0jQ1) 行:L1[j] R1[j] L2[j] R2[j]

输出格式如下:

  • 1 行:设 maxsum 返回值为 S,则输出 S[0] S[1]  S[Q1]

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