vicky啊 发表于 2021-3-20 13:27:05

球球解答,我的答案oj一直通过不了

18927 前缀和
时间限制:1000MS代码长度限制:10KB
提交次数:0 通过次数:0

题型: 编程题   语言: 不限定
Description
前缀和是一种重要的预处理方法,能极大地降低查询序列区间和的时间复杂度。
现在一个序列中有n个整数,下标从1....n。
有m个查询,每个查询给出一个区间的左右端点下标,请输出这个区间所有数据的和。



输入格式
第一行一个整数n。(1<=n<=100000)
第二行n个整数,用空格分隔,int范围。
第三行一个整数m。(1<=m<=100000)
下面m行每行两个整数L,R。(1<=L<=R<=n)


输出格式
输出共m行,每行一个整数为对应区间的序列和。
注意序列和的数据范围可能超出int范围。


输入样例
5
3 -8 4 5 1
4
3 3
1 1
2 4
1 3


输出样例
4
3
1
-1


提示
在读入数据后,用一个sum数组来记录从第1个元素到第i个元素的和,for(i=1;i<=n;i++)sum=sum+a;
这样区间的和可以用sum-sum得到。

巴巴鲁 发表于 2021-3-20 13:30:38

你代码呢?
让猜猜你怎么写的?

jackz007 发表于 2021-3-20 13:48:42

本帖最后由 jackz007 于 2021-3-20 13:57 编辑

#include <stdio.h>

main(void)
{
      long long D , sum                                                 ;
      int LR , i , j , m , n                                       ;
      scanf("%d" , & n)                                                         ;
      for(i = 0 ; i < n ; i ++) scanf("%lld" , & D)                        ;
      scanf("%d" , & m)                                                         ;
      for(i = 0 ; i < m ; i ++) scanf("%d%d" , & LR , & LR)         ;
      for(i = 0 ; i < m ; i ++) {
                for(sum = 0 , j = LR - 1 ; j < LR ; j ++) sum += D ;
                printf("%lld\n" , sum)                                          ;
      }
}
      编译、运行实况
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
5
3 -8 4 5 1
4
3 3
1 1
2 4
1 3
4
3
1
-1

D:\00.Excise\C>

Loooog 发表于 2021-3-20 14:09:00

笑死,同是华农人,我OJ也是卡这题

vicky啊 发表于 2021-3-21 13:30:19

Loooog 发表于 2021-3-20 14:09
笑死,同是华农人,我OJ也是卡这题

哈哈哈,就一直过不了

vicky啊 发表于 2021-3-21 13:32:00

jackz007 发表于 2021-3-20 13:48
编译、运行实况

这个代码超时了{:5_100:}

mengdai 发表于 2021-3-28 21:23:25

题目不就是赤裸裸的题解吗?
页: [1]
查看完整版本: 球球解答,我的答案oj一直通过不了