CF1872G Replace With Product
题目描述
给定一个长度为 $n$ 的正整数数组 $a$。你需要恰好执行一次如下操作:
- 选择两个整数 $l$ 和 $r$($1 \le l \le r \le n$),将子数组 $a[l \ldots r]$ 替换为一个元素:该子数组所有元素的乘积(即 $a_l \cdot \ldots \cdot a_r$)。
例如,如果对数组 $[5, 4, 3, 2, 1]$ 执行参数为 $l = 2, r = 4$ 的操作,数组会变为 $[5, 24, 1]$。
你的任务是,在执行该操作后,最大化数组元素之和。请找出最优的子数组进行操作。
输入格式
每组测试数据包含多组测试用例。第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是每组测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$),表示数组 $a$ 的长度。
每个测试用例的第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 10^9$)。
保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例,输出两个整数 $l$ 和 $r$($1 \le l \le r \le n$),表示要用乘积替换的子数组的区间端点。
如果有多组解,输出任意一组均可。
说明/提示
在第一个测试用例中,执行参数为 $l = 2, r = 4$ 的操作后,数组 $[1, 3, 1, 3]$ 变为 $[1, 9]$,其元素之和为 $10$。可以很容易看出,替换其他任何区间得到的和都小于 $10$。
在第二个测试用例中,执行参数为 $l = 3, r = 4$ 的操作后,数组 $[1, 1, 2, 3]$ 变为 $[1, 1, 6]$,其元素之和为 $8$。可以很容易看出,替换其他任何区间得到的和都小于 $8$。
在第三个测试用例中,最优的做法是选择任意 $l = r$ 的操作,此时数组元素之和保持为 $5$,而替换其他区间会使数组元素之和减少。
由 ChatGPT 4.1 翻译