小美拿到了一个由正整数组成的数组,但其中有一些元素是未知的(用 0 来表示)。 现在小美想知道,如果那些未知的元素在区间 [l,r] 范围内随机取值的话,数组所有元素之和的最小值和最大值分别是多少? 共有 q 次询问。
第一行输入两个正整数 n,q ,代表数组大小和询问次数。 第二行输入 n 个整数 a_i ,其中如果输入的 a_i 为 0,那么说明 a_i 是未知的。 接下来的 q 行,每行输入两个正整数 l,r ,代表一次询问。 1≤ n,q ≤ 10^5 0 ≤ a_i ≤ 10^9 1≤ l ≤ r ≤ 10^9
输出 q 行,每行输出两个正整数,代表所有元素之和的最小值和最大值。
3 2 1 0 3 1 2 4 4
5 6 8 8
考点:前缀和
数据规模 n ≤ 1e5 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:前缀和
本题切入点
先统计未知元素个数 cnt 与已知元素之和 base,则 min = base + cnt×l,max = base + cnt×r,每次询问 O(1)。
预处理前缀和数组,把「区间求和」从 O(n) 降到 O(1)。
思路框架(前缀和 通法 · 非本题专属)
实现要点:开 long long,避免 n 较大时求和溢出。
复杂度:时间 预处理 O(n),每次查询 O(1) | 空间 O(n)
该范式的通法易错点
对照本题
样例 1:输入 3 2 / 1 0 3 / 1 2 / 4 4 → 输出 5 6 / 8 8
只有第二个元素是未知的。
第一次询问,数组最小的和是 1+1+3=5,最大的和是 1+2+3=6。
第二次询问,显然数组的元素和必然为 8。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2024年春招-美团-前端移动端-第一批笔试;2024年春招-美团-算法策略-第一批笔试;2024年春招-美团-技术岗-第一批笔试 等。