CF1644C.Increase Subarray Sums

普及/提高-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

You are given an array a1,a2,…,ana_1, a_2, \dots, a_n, consisting of nn integers. You are also given an integer value xx.

Let f(k)f(k) be the maximum sum of a contiguous subarray of aa after applying the following operation: add xx to the elements on exactly kk distinct positions. An empty subarray should also be considered, it has sum 00.

Note that the subarray doesn't have to include all of the increased elements.

Calculate the maximum value of f(k)f(k) for all kk from 00 to nn independently.

给你一个由 nn 个整数组成的数组 a1,a2,…,ana_1, a_2, \dots, a_n,以及一个整数值 xx。

定义 f(k)f(k) 为:对数组 aa 执行如下操作后,其连续子数组的最大和——恰好将 xx 加到 kk 个互不相同的位置上的元素上。空子数组也需考虑,其和为 00。

注意:该连续子数组不必包含所有被增加过的元素。

请独立地计算 kk 从 00 到 nn 的所有取值所对应的 f(k)f(k) 的最大值。

输入格式

The first line contains a single integer tt (1≤t≤50001 \le t \le 5000) — the number of testcases.

The first line of the testcase contains two integers nn and xx (1≤n≤50001 \le n \le 5000; 0≤x≤1050 \le x \le 10^5) — the number of elements in the array and the value to add.

The second line contains nn integers a1,a2,…,ana_1, a_2, \dots, a_n (−105≤ai≤105-10^5 \le a_i \le 10^5).

The sum of nn over all testcases doesn't exceed 50005000.

第一行包含一个整数 tt(1≤t≤50001 \le t \le 5000)—— 测试用例的数量。

每个测试用例的第一行包含两个整数 nn 和 xx(1≤n≤50001 \le n \le 5000;0≤x≤1050 \le x \le 10^5)—— 数组中元素的个数以及要加上的值。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n(−105≤ai≤105-10^5 \le a_i \le 10^5)。

所有测试用例中 nn 的总和不超过 50005000。

输出格式

For each testcase, print n+1n + 1 integers — the maximum value of f(k)f(k) for all kk from 00 to nn independently.

对于每个测试用例,输出 n+1n + 1 个整数——即对所有从 00 到 nn 的 kk,分别对应的 f(k)f(k) 的最大值。

输入输出样例

  • 输入#1

    3
    4 2
    4 1 3 2
    3 5
    -2 -7 -1
    10 2
    -6 -1 -2 4 -6 -1 -4 4 -5 -4

    输出#1

    10 12 14 16 18
    0 4 4 5
    4 6 6 7 7 7 7 8 8 8 8

说明/提示

In the first testcase, it doesn't matter which elements you add xx to. The subarray with the maximum sum will always be the entire array. If you increase kk elements by xx, k⋅xk \cdot x will be added to the sum.

In the second testcase:

  • For k=0k = 0, the empty subarray is the best option.
  • For k=1k = 1, it's optimal to increase the element at position 33. The best sum becomes −1+5=4-1 + 5 = 4 for a subarray [3,3][3, 3].
  • For k=2k = 2, it's optimal to increase the element at position 33 and any other element. The best sum is still 44 for a subarray [3,3][3, 3].
  • For k=3k = 3, you have to increase all elements. The best sum becomes (−2+5)+(−7+5)+(−1+5)=5(-2 + 5) + (-7 + 5) + (-1 + 5) = 5 for a subarray [1,3][1, 3].

在第一个测试用例中,将 xx 加到哪些元素上并不重要。和最大的子数组始终是整个数组。如果你将 kk 个元素各增加 xx,则总和将增加 k⋅xk \cdot x。

在第二个测试用例中:

  • 当 k=0k = 0 时,空子数组是最优选择。
  • 当 k=1k = 1 时,最优策略是将位置 33 处的元素增加 xx。此时最佳子数组和为 −1+5=4-1 + 5 = 4,对应子数组 [3,3][3, 3]。
  • 当 k=2k = 2 时,最优策略是将位置 33 处的元素以及任意另一个元素各增加 xx。此时最佳子数组和仍为 44,对应子数组 [3,3][3, 3]。
  • 当 k=3k = 3 时,必须将所有元素都增加 xx。此时最佳子数组和为 (−2+5)+(−7+5)+(−1+5)=5(-2 + 5) + (-7 + 5) + (-1 + 5) = 5,对应子数组 [1,3][1, 3]。

输入解题思路,AI测评打分。不知道怎么写?

首页