文章目录
一、概念
-
前缀和
前缀和是一种重要的预处理,能大大降低查询的时间复杂度。可以简单理解为“数列的前 n n n 项的和”。—— OI-wiki
他已经说得很完整了,因此我不需要再补充什么。
-
差分
差分是一种和前缀和相对的策略,可以当做是求和的逆运算。
这种策略的定义是令 b i = { a i − a i − 1 i ∈ [ 2 , n ] a 1 i = 1 b_i=\begin{cases}a_i-a_{i-1}\,&i\in[2,n]\\a_1\,&i=1\end{cases} bi={ ai−ai−1a1i∈[2,n]i=1—— OI-wiki所以……你们这个公式 b i = { a i − a i − 1 i ∈ [ 2 , n ] a 1 i = 1 b_i=\begin{cases}a_i-a_{i-1}\,&i\in[2,n]\\a_1\,&i=1\end{cases} bi={ ai−ai−1a1i∈[2,n]i=1看懂了吗?
翻译一下,也就是: 差分数组中的元素除第一个外都是用前一个数减去这个数,而第一个数就是它本身。
二、差异
-
相同
都是一种预处理,解决这道题因需要算和或算数量而时间太长最终 T L E TLE TLE 的“生存死局”而出现的方法。 -
不同
看名字首先就能知道,“前缀和”是算和,“差分”是算差。它们互为逆运算,运用完全不同。
那么,有什么用呢?
三、运用
-
前缀和
-
一维前缀和
-
酒厂选址
题目描述
Abstinence(戒酒)岛的居民们酷爱一种无酒精啤酒。以前这种啤酒都是从波兰进口,但今年居民们想建一个自己的啤酒厂。岛上所有的城市都坐落在海边,并且由一条沿海岸线的环岛高速路连接。酒厂的投资者收集了关于啤酒需求量的信息,即每天各城市消费的啤酒桶数。另外还知道相邻城市之间的距离。每桶啤酒每英里的运费是1元。日运费是将所需要的啤酒从酒厂运到所有城市所必需的运费之和。日运费的多少和酒厂的选址有关。投资者想找到一个合适的城市来修建酒厂,以使得日运费最小。编程读入城市的数目、相邻两城市间的距离以及每个城市消费的啤酒桶数,计算最小的日运费。
输入格式
第一行是一个整数 n n n( 5 ≤ n ≤ 10000 5 \le n \le 10000 5≤n≤10000),表示城市的数目。城市沿高速路编号,使得相邻的城市的编号也相邻(城市 1 1 1 和 n n n 也被认为是相邻)。以下的 n n n 行,每行有两个非负整数。第 I + 1 I+1 I+1 行的数 z i z_i zi 与 d i d_i di 分别是城市 I I I 每日的啤酒消费量(桶)和从城市 I I I 沿高速路到下一个城市的距离(英里)。高速路的总长不会超过 1000000 1000000 100
-
-