最多把一段连续作业的收益乘 2,再在最终序列上求非空最大子段和。不开窗口时就是普通 Kadane;开了窗口时,最终选中的那段必然盖住加速区间。
推理集群上排着 m 项作业,第 p 项有一个收益 vp(正数表示划算,负数表示亏本)。
调度允许开一次加速窗口:挑一段连续作业 [L,R](1≤L≤R≤m),把这段里每一项的收益改成原来的两倍。也可以一次都不开。
窗口用完之后(或者根本没用),再从作业序列里取出一段非空的连续作业,使它们的收益加起来尽量大。请给出这个最大和。
取出的那段至少要包含一项,不能交空段。
首行给出正整数 k(1≤k≤2×101),即询问组数。
随后 k 行,每行先写出正整数 m(1≤m≤2×105),再跟 m 个整数 v1,v2,…,vm(∣vp∣≤1000000000),即该组作业条数和各项收益。
各组 m 加起来不超过 200000。
一行输出 k 个整数,相邻两项用空格隔开,依次为每组询问的最大连续收益和。
输入
2
4 2 -3 4 -1
3 -5 -2 -7
输出
8 -2
说明
输入
1
6 1 2 -5 3 -1 4
输出
12
说明
把 [4,6](3,−1,4)翻倍,这段和从 6 变成 12。左侧 1,2,−5 接上去会变差,所以最大就是 12。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册