ACM入门之前缀和
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM入门之前缀和相关的知识,希望对你有一定的参考价值。
前缀和在ACM中算是一个简单易学,且十分重要的一个算法。
前缀和的种类:
- 一维前缀和
- 二维前缀和
- 高维前缀和(比较少见)
- 树上前缀和
对于一维前缀和,它可以解决O(1)
的时间复杂度来获取某一区间的和。
对于二维前缀和,它可以解决O(1)
的时间复杂度来获取某一矩阵的和。
前缀和的弊端,即前缀和数组构造后不能再次的修改,否则还得再次构建,时间复杂度会大幅度的上升。
一维前缀和模板:
const int N=1e5+10;
int a[N],s[N],n;
void init()//构造前缀和
for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
int query(int l,int r)//查询[l,r]的和
return s[r]-s[l-1];
一维前缀和相关习题:
U69096 前缀和的逆 代码地址
U53525 前缀和(例题) 代码地址
AT2412 最大の和 代码地址
P3131 [USACO16JAN]Subsequences Summing to Sevens S 代码地址
二维前缀和模板:
const int N=1e3+10;
int a[N][N],s[N][N],n,m;
void init()
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];
int query(int x,int y,int xx,int yy)//(x,y)矩阵的左上角的坐标,(xx,yy)矩阵右下角的坐标
int sum=s[xx][yy]-s[x-1][yy]-s[xx][y-1]+s[x-1][y-1];
return sum;
二维前缀和相关习题:
P1387 最大正方形 代码地址
以上是关于ACM入门之前缀和的主要内容,如果未能解决你的问题,请参考以下文章