题目:数苹果
描述
今年苹果大丰收了,大人们在忙着采摘苹果,摘下来的苹果堆放成了很多堆,所有的苹果堆排成了一排。宣宣一个人在苹果堆旁边玩,她已经知道每堆里有多少个苹果。
现在,她想知道从第a堆到第b堆共有多少个苹果。你能帮帮她吗?
输入
输入文件名为apple.in。
第一行,一个整数n,表示苹果堆的个数;
第二行,n个正整数,依次表示第1堆、第2堆、……、第n堆的苹果个数;
第三行,一个整数m,表示询问的次数;
以下m行,每行两个正整数a,b,表示问从第a到b堆的苹果个数。
输出
输出文件名为apple.out。
对于每个询问a,b输出一行,表示第a堆到第b堆的苹果个数。
输入样例
5 1 2 3 4 5 3 1 3 2 4 1 5
输出样例
6 9 15
提示
对于100%的数据:每堆苹果的数量<=100; a<=b。
对于40%的数据:n,m<=1000;
对于100%的数据:n,m<=100000。
这道题如果用循环,运行时会超时
在此,有一个新方法,在输入a[ i ]时将a[ i ]的值设为前面所有数字相加的和,输出时只需输出
a[ y ]-a[ x-1 ]的值。
| 输入: | 1 | 2 | 3 | 4 | 5 | 
|---|---|---|---|---|---|
| 存入: | 1 | 3 | 6 | 10 | 15 | 
这样,代码就不会运行超时了
#include <iostream>
using namespace std;
int main()
{
	long long int n,x,y,m,i,j,sum;
	cin >> n;
	int a[n+1];
	a[0]=0;
	for (i=1;i<=n;i++)
	{
		cin >> a[i];
		a[i]+=a[i-1];//a[i]的值等于目前所有输入的值的和
	}
	cin >> m;
	for (i=1;i<=m;i++)
	{
		
		cin >> x >> y;
		sum = a[y]-a[x-1];//输出x至y堆苹果的和
		cout << sum << endl;
	}
	
	return 0;
}









