福田网站建设,信息流广告优秀案例,百度域名地址查询,html网站设计源码小美拿到了一个由正整数组成的数组#xff0c;但其中有一些元素是未知的#xff08;用 0 来表示#xff09;。 现在小美想知道#xff0c;如果那些未知的元素在区间[l,r]范围内随机取值的话#xff0c;数组所有元素之和的最小值和最大值分别是多少#xff1f; 共有q次询问…小美拿到了一个由正整数组成的数组但其中有一些元素是未知的用 0 来表示。 现在小美想知道如果那些未知的元素在区间[l,r]范围内随机取值的话数组所有元素之和的最小值和最大值分别是多少 共有q次询问。 时间限制C/C 1秒其他语言2秒 空间限制C/C 256M其他语言512M 输入描述 第一行输入两个正整数n,q代表数组大小和询问次数。 第二行输入n个整数ai其中如果输入ai的为 0那么说明ai是未知的。 接下来的q行每行输入两个正整数l,r代表一次询问。 1n,q10^5 0ai10^9 1lr10^9 输出描述 输出q行每行输出两个正整数代表所有元素之和的最小值和最大值。 示例1 输入例子 3 2
1 0 3
1 2
4 4 输出例子 5 6
8 8 例子说明 只有第二个元素是未知的。
第一次询问数组最小的和是 1135最大的和是 1236。
第二次询问显然数组的元素和必然为 8。 可以看出数组中为0的就是不确定的元素他可以取l和r范围内的任意数题目要求最小和最大那就取l和r
因为未知的元素数量固定所以我们可以记录它的数量然后计算其他确定的元素的和最后加上不确定的元素即可 注意这道题ai量级是1e9相加会变得很大可以开一个longlong来保存他们的和 代码
#include iostream
#includealgorithm
#includecstdio
typedef long long LL;
using namespace std;const int N1e510;
int a[N];
int n,q;int main()
{ scanf(%d%d,n,q);for(int i0;in;i){scanf(%d,a[i]);}int l,r;LL sum0;// minsum,maxsum;LL cnt0;for(int i0;in;i){if(a[i]0){// minsuml;// maxsumr;cnt;}// minsuma[i];// maxsuma[i];suma[i];}while(q--){// minsum0;// maxsum0;scanf(%d%d,l,r); printf(%lld %lld\n,suml*cnt,sumr*cnt);}return 0;
}题目来自美团2024年春招