一维前缀和、二维前缀和与一维差分、二维差分

本文介绍了前缀和与差分的概念,包括一维和二维的情况。一维前缀和用于快速计算区间和,二维前缀和解决矩阵区域和问题。一维差分处理区间元素加减操作,二维差分同样适用于二维序列的修改。通过这些方法,可以将时间复杂度降低,提高算法效率。
摘要由CSDN通过智能技术生成

前缀和

1.一维前缀和

引入:有一串长度为n的数列a1,a2,a3......an,再给出m个询问,每次询问给出L,R两个数,要求给出区间[L,R]里的数的和

朴素方法:对于m次询问,每次都遍历一遍所给的区间,计算出答案,时间复杂度O(n*m)

利用前缀和:我们定义前缀和sum[i]表示a1+a2+...+ai;区间[L,R]里的数的和即为sum[R]-sum[L-1],时间复杂度降到O(n+m);

void init()
{
sum[0]=0;
for(int i=1;i<=n;i++)
	sum[i]=sum[i-1]+a[i];
}
void query(int l,int r)
{
	return sum[r]-sum[l-1];
}

2.二维前缀和

 

引入:如图所示,有一个n*m的数字矩阵,给出q个询问,每次询问给出x1,x2,y1,y2四个数,要求给出区间[x1,y1][x2,y2]里的数的和

朴素方法:对于q次询问,每次都遍历一遍所给的区间,计算出答案,时间复杂度O(n*m*q)</

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值