Advertisement

一维前缀和区间、二维前缀和子矩阵之和

阅读量:

一维前缀和

前缀和是指将数组a的每一项i与其前面所有项的和计算出来并存储到数组s中。
根据定义可知求取区间和更为便捷。
例如求取数组a在区间[l, r]内的和时,在常规情况下需进行一次遍历循环(如for循环):sum += a[i]从i=l到r累加。
当题目中的数据范围较大时采用常规方法会导致效率低下。然而通过使用前缀和算法可以快速计算区间[l, r]内的总值:sum = s[r] - s[l-1]这一操作的时间复杂度仅为O(1)。

模板:

复制代码
     s[i] = a[1] + a[2] + ... + a[i]
     a[l] + ... + a[r] = s[r] - s[l-1]

例题:

输入一个长度为n的整数序列。

接下来再输入m个询问,每个询问输入一对l, r。

对于每个询问,输出原序列中从第l个数到第r个数的和。

输入格式
第一行包含两个整数n和m。

第二行包含n个整数,表示整数数列。

接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。

输出格式
共m行,每行输出一个询问的结果。

数据范围
1≤l≤r≤n ,
1≤n,m≤100000 ,
−1000≤数列中元素的值≤1000
输入样例:

复制代码
    5 3
    2 1 3 6 4
    1 2
    1 3

全部评论 (0)

还没有任何评论哟~