#P1466. 删除子数组

删除子数组

题目描述

给定一个正整数序列 A=(a1,a2,,aN) A=(a_1,a_2,\ldots,a_N)
你可以进行以下操作任意次(包括零次):

  • A A 中选择一个非空的连续子序列,并将其删除。

对于每个 x=1,2,,M x=1,2,\ldots,M ,请解决以下问题:

  • 找出使 A A 的元素总和恰好等于 x x 所需的最小操作次数。如果无论如何操作都无法使 A A 的元素总和恰好等于 x x ,则输出 -1

注意,当 A A 为空时,其元素总和被视为 0 0

输入格式

输入从标准输入按以下格式给出:

N M
a1aNa_1 \ldots a_N

输出格式

输出 MM 行。第 ii 行应输出 x=ix = i 时的答案。

输入输出样例 #1

输入 #1

4 5
1 2 3 4

输出 #1

1
2
1
1
1

输入输出样例 #2

输入 #2

1 5
3

输出 #2

-1
-1
0
-1
-1

输入输出样例 #3

输入 #3

12 20
2 5 6 5 2 1 7 9 7 2 5 5

输出 #3

2
1
2
2
1
2
1
2
2
1
2
1
1
1
2
2
1
1
1
1

数据范围

  • 1N,M30001 \leq N, M \leq 3000
  • 1ai30001 \leq a_i \leq 3000
  • 输入均为整数

样例解释 #1

以下是操作次数最少的示例:

  • x = 1 :对 a2,a3,a4a_2, a_3, a_4 执行操作,使总和为 1 。
  • x = 2 :先对 a3,a4a_3, a_4 执行操作,再对 a1 a_1 执行操作,使总和为 2 。
  • x = 3 :对 a3,a4a_3, a_4 执行操作,使总和为 3 。
  • x = 4 :对 a1,a2,a3 a_1, a_2, a_3 执行操作,使总和为 4 。
  • x = 5 :对 a2,a3a_2, a_3 执行操作,使总和为 5 。