Problem: 每次测试时间限制:1.5秒 每次测试的内存限制:256MB 输入:标准输入 输出:标准输出
给定2个数字N和Q,N个数字的数组A和Q个数字对L、R.对于每个查询Q,打印包含从索引L到索引R的所有数字的总和的单行.
Input
- 第一行包含两个数字N、Q (1≤N,Q≤10^5),其中N是A中的元素数,Q是查询对的数.
- 第二行包含N个数字**(1≤AI≤10^9)**.
- 接下来的Q行包含L,R,(1 ≤ L ≤ R ≤ N).
Output个 对于每个查询Q,打印一行,该行包含从索引L到索引R的所有数字的总和.
Examples:个
input个个
6 3
6 4 2 7 2 7
1 3
3 6
1 6
output个个
12
18
28
input个个
4 3
5 5 2 3
1 3
2 3
1 4
output个个
12
7
15
我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, q;
scanf("%d %d", &n, &q);
long long int sum[100001];
for (int i = 0; i < n; i++)
{
long long int num;
scanf("%lld", &num);
if (i == 0)
{
sum[i] = num;
}
else
{
sum[i] = sum[i-1] + num;
}
}
for (int j = 0; j < q; j++)
{
int l,r;
scanf("%d %d", &l, &r);
if (l == 1)
{
printf("%d\n", sum[r - 1]);
}
else
{
printf("%d\n", sum[r - 1] - sum[l - 2]);
}
}
return 0;
}
我试图通过定义一个名为sum的数组来解决这个问题.第一个循环将单独扫描,并通过与先前输入相加存储在和数组中.然后,在第二个循环中,它将扫描范围并打印总和.如果L等于1,则求和在和数组中的索引[r-1]处.否则,索引[L-2]处的求和将从索引[r-1]处的求和中减go .
Explaining my algorithm:个
input:个
6 1
6 4 2 7 2 7
3 6
Explanation:
sum[0] = 6, sum[1] = 10, sum[2] = 12, sum[3] = 19, sum[4] = 21, sum[5] = 28
Answer will be ( sum[6 - 1] - sum[3 - 2] )
= ( sum[5] - sum[1] )
= 28 - 10
= 18
= 2+7+2+7
这种方法已经成功地通过了三次测试.但是,它显示了"Wrong answer on test 4".请帮我找出我的错误.