前缀和与差分
Posted mch5201314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前缀和与差分相关的知识,希望对你有一定的参考价值。
学习链接
[https://blog.csdn.net/k_r_forever/article/details/81775899]
这个地方说的很好了。
前缀和和差分很重要
在树状数组和线段树都会用到
一维
#include<bits/stdc++.h>
using namespace std;
const int N=1000+10;
int f[N],t[N];
int main()
{
int n,m,l,r,x,q;
//freopen("in.txt","r",stdin);
cin>>n;
for(int i=1;i<=n;i++)
cin>>f[i];
cin>>m;
for(int i=0;i<m;i++)
{
cin>>l>>r>>x;
t[l]+=x,t[r+1]-=x;
}
cin>>q;
int add=0;
for(int i=1;i<=n;i++)
{ add+=t[i];
f[i]+=f[i-1]+add;
}
for(int i=0;i<q;i++){
cin>>l>>r;
cout<<f[r]-f[l-1]<<endl;
}
return 0;
}
二维
#include<bits/stdc++.h>
using namespace std;
const int N=1000+10;
int f[N],t[N];
int a[N][N],b[N][N];
int main()
{
int n,m,x,x1,y1,x2,y2,q;
freopen("in.txt","r",stdin);
cin>>n>>m>>q;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=0;i<m;i++)
{
cin>>x1>>y1>>x2>>y2>>x;
b[x1][y1]+=x,b[x2+1][y1]-=x,b[x1][y2+1]-=x,b[x2+1][y2+1]+=x;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+b[i][j];
for(int i=0;i<q;i++){
cin>>x1>>y1>>x2>>y2;
int ans=a[x2][y2]-a[x2][y1-1]-a[x1-1][y2]+a[x1-1][y1-1];
cout<<ans<<endl;
}
return 0;
}
以上是关于前缀和与差分的主要内容,如果未能解决你的问题,请参考以下文章