前缀和
1.一维前缀和
for(int i=1;i<=n;i++)
{
s[i]=s[i-1]+a[i];
}
2.二维前缀和
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
}
}
3.最大字段和
给出一个长度为 nn 的序列 aa,选出其中连续且非空的一段使得这段和最大。
int qd()
{
int sum=0,ans=-INf;
for(int i=1;i<=n;i++)
{
sum+=a[i];
if(sum>ans) ans=sum;
if(sum<0) sum=0;
}
return ans;
}