回放规则会在水位超过 cap 时清零,因此「最终 g=0」不等于「整段和 ≤cap」。需要用 DP 处理可能发生的多次清零。
令前缀和 pref[0]=0,pref[i]=loads[0]+⋯+loads[i−1]。
定义 dp[i]:左端点固定为 i 时,有多少个右端点 R 使窗口 [i,R] 存活。
从右往左算。对固定左端点 i,在前缀和上二分出最小的 q,满足
风控侧按时间顺序收到 n 次探针读数,第 i 次读数为正整数 loads[i](下标从 0 开始)。值班同学可以任选一段连续窗口 [L,R],按从左到右顺序回放这段读数,并维护一个信誉水位 g,初始为 0。阈值是正整数 cap。
回放时,每读入一个值 k 依次发生:
回放整段结束后,若最终 g=0,称该窗口为存活窗口。
请返回:一共有多少个有序对 (L,R)(0≤L≤R<n)对应的窗口是存活窗口。
请实现:
countLiveWindows(loads: int[], cap: int) -> long
(答案可能很大,请使用 64 位整数。)
两行:
loadscap约束:
一个整数:存活窗口的个数。
输入:
[1, 1, 1, 1]
2
输出:
8
说明:共 10 个窗口,其中不存活的只有 [0,2] 与 [1,3](回放后水位被清成 0),故存活 8 个。
输入:
[1, 2, 3]
2
输出:
2
说明:只有单点窗口 [1] 与 [2] 最终水位非零。
输入:
[10]
6
输出:
0
说明:唯一窗口回放时 10>6,水位被清零,最终为 0。
本题属于以下题库,请选择所需题库进行购买
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.