Algorithm 查找给定多个查询的最小子数组长度

Algorithm 查找给定多个查询的最小子数组长度,algorithm,data-structures,Algorithm,Data Structures,您将获得一个整数数组A[],最大长度为N,最多为10^6,然后是M查询数。查询时,您将得到一个整数X,并且您必须返回其和大于或等于X的子数组的最小长度。问题是此类查询的数量M最多可达到10^6 任何能在比赛时间内有效解决问题的线索 注:当M非常小时,我们可以用O(M*N)求解,但当M很大时,我想一定有不同的方法 注意:当M=~1时,有一种方法可以解决O(N)中的问题 当M很大时,为什么你说“必须有不同的方法”呢?否则它在比赛时间限制下是无法解决的,例如5/10秒。DP或预处理有帮助吗?您需要子数

您将获得一个整数数组
A[]
,最大长度为
N
,最多为
10^6
,然后是
M
查询数。查询时,您将得到一个整数
X
,并且您必须返回其和大于或等于
X
的子数组的最小长度。问题是此类查询的数量M最多可达到
10^6

任何能在比赛时间内有效解决问题的线索

注:当M非常小时,我们可以用
O(M*N)
求解,但当M很大时,我想一定有不同的方法


注意:当M=~1时,有一种方法可以解决
O(N)
中的问题

当M很大时,为什么你说“必须有不同的方法”呢?否则它在比赛时间限制下是无法解决的,例如5/10秒。DP或预处理有帮助吗?您需要子数组的最小长度,其和为>=to
X
。为了检索此信息,您需要知道什么?目前,我认为改进(摊销)运行时的唯一可能性是使用预处理阶段,在该阶段计算所有子数组的元素之和,并创建从元素之和到相应子数组边界(或长度)的映射。完成后,您可以在固定时间内检索所有连续查询所需的内容。是的,我也有类似的想法,但不知道如何实现。如果存在更好的解决方案,仍在等待。谢谢@nbro