题目描述
最近,熊国的紫皮糖在兔子国卖脱销了,现在还有许多人没有买到紫皮糖。
现在有n个人下了订单没买到紫皮糖,每个人想买的紫皮糖数量是a个,
但是由于紫皮糖卖的太火了,以至于只能卖给n个人当中的一部分人。
现在熊国有m种方案,每次方案输入一对l,r,代表从第l个人到第r个人可以买到紫皮糖,
回答每次方案所卖的紫皮糖数量。
输入
第一行包含两个整数 n 和 m。
第二行包含 n 个整数,表示每个人想买到紫皮糖的数量。
接下来 m 行,每行包含两个整数 l 和 r,表示从l到r这个区间的人可以买到紫皮糖。
输出
共 m 行,每行输出所卖紫皮糖的数量。
数据范围
1≤l≤r≤n,
1≤n,m≤100000,
0≤a≤1e9
由于数据量输入较大 建议使用scanf 输入,printf输出。
样例输入
5 3 2 1 3 6 4 1 2 1 3 2 4
样例输出
3 6 10
代码:
#include<bits/stdc++.h>
using namespace std;
long long a[100100]={0}; //大数组开在main函数外边,内存更大,不会爆
int main()
{
int m,n;
int i,j;
int l,r;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%lld",&a[i]); //切记,数组用的long long类型,所以输入的时候要用long long
}
for(j=1;j<=m;j++)
{
long long sum=0; //sum也需要定义为long long,因为sum参与到了大数的运算中
scanf("%d%d",&l,&r);
for(i=l;i<=r;i++)
{
sum=sum+a[i];
}
printf("%lld\n",sum);
}
return 0;
}
本题需要注意的地方在于变量名称的定义,例如a的范围在0到10的9次方内,int类型在10的9次方之内都可以,但是注意本题运算涉及到了数字的相加,因此存在数组中数字大于10的9次方的情况,因此我们选择long long类型,而变量sum被我们用来做加法运算,所以也应该在输入时使用long long类型,其他参与计算的变量也是如此。 例如如果sum仍然用int,在计算的过程中,sum的量若大于10的9次方,则无法进行运算,会报错。