#P14705. [Bulgarian2017]Monopoly

[Bulgarian2017]Monopoly

题目描述

Eli 因为设计游乐园获得了一大笔钱,现在她想拿这笔钱去投资。

她决定购买自己所在城市主街上一段连续的商铺。

通常来说,购买一个商铺需要向当前拥有者支付一定金额。但其中有些商铺长期亏损,店主甚至愿意倒贴钱把商铺脱手。于是,如果主街上共有 N 个商铺,我们可以用一个整数序列 A1, A2, ..., AN 来表示购买每个商铺所需的金额:

  • Ai > 0,表示 Eli 需要支付 Ai
  • Ai < 0,表示 Eli 反而会收到 -Ai

现在 Eli 想知道:在最多只愿意支付 M 元的前提下,她最多能购买多少个连续的商铺。

请编写程序 monopoly,帮助她作出最优决策。

输入格式

第一行输入两个整数 NM,分别表示商铺总数和 Eli 的预算。

第二行输入 N 个整数 A1, A2, ..., AN,表示按街道顺序给出的各商铺价格。

输出格式

输出两个整数:

  1. Eli 最多可以购买的连续商铺数量;
  2. 在达到该最大数量的所有方案中,最左端商铺的最小编号(编号从 1 开始)。

保证 Eli 至少可以买下一个商铺。

数据范围

  • 1 <= N <= 500000
  • 1 <= M <= 1000000000
  • -1000000 <= Ai <= 1000000

样例

输入

15 666
101 42 -132 17 404 -13 55 222 89 11 -66 91 -9 21 4

输出

10 2

样例解释

Eli 可以从编号为 2 的商铺开始,连续购买 10 个商铺。对应总花费为:

42 - 132 + 17 + 404 - 13 + 55 + 222 + 89 + 11 - 66 = 629

这不超过她的预算 666

注意,从编号 6 开始她同样也能买下 10 个商铺,而且总花费更低;但题目要求输出最小的起始编号,所以答案仍然是 2

如果她的预算再多 3 元,变成 669,那么她就能多买一个商铺(从编号 3 开始)。