前缀和及差分
一维二维前缀和、差分模板题即应用
YAOSHIAO
这个作者很懒,什么都没留下…
展开
-
洛谷 P3406 海底高铁(C++)
洛谷 P3406 海底高铁1、题目(来源于洛谷):某铁路经过N个城市,每个城市都有一个站。不过,由于各个城市之间不能协调好,于是乘车每经过两个相邻的城市之间(方向不限),必须单独购买这一小段的车票。第i段铁路连接了城市i和城市i+1(1<=i<N)。如果搭乘的比较远,需要购买多张车票。第i段铁路购买纸质单程票需要Ai博艾元。虽然一些事情没有协调好,各段铁路公司也为了方便乘客,推出了IC卡。对于第i段铁路,需要花Ci博艾元的工本费购买一张IC卡,然后乘坐这段铁路一次就只要扣Bi(Bi<原创 2020-08-07 06:39:41 · 803 阅读 · 0 评论 -
洛谷 P3397 地毯
洛谷 P3397 地毯1、题目(来源于洛谷):2、主要思想:①用二维数组前缀和优化②差分矩阵3、C++代码如下:#include <iostream>using namespace std;void insert(int x1, int y1, int x2, int y2, int c);const int N = 1010;int n, m;int a[N][N], b[N][N];int main(){ cin >> n >原创 2020-08-06 21:48:22 · 296 阅读 · 0 评论 -
洛谷 P1147 连续自然数和(C++)
洛谷 P1147 连续自然数和1、题目(来源于洛谷):2、主要思想:①先想到双重循环暴力枚举②发现可以将枚举区间右端缩小为m的一半,因为从m / 2 + (m / 2 + 1)开始后面都会大于m③又发现因为可以用双指针,当枚举到s[j] - s[i - 1] == m或者s[j] - s[i - 1] > m时可以直接跳出循环,枚举下一个 i 。④用前缀和优化计算子序列和的部分3、C++代码如下:#include <iostream>using namespace s原创 2020-08-06 21:39:29 · 2560 阅读 · 2 评论 -
洛谷 P4702 取石子(C++)
洛谷 P4702 取石子1、题目(来源于洛谷):2、主要思想:①假设现在还有石头但是不能取了,则一定有a[n] <= a[n-1] <= … <=a[0]=0。显然这是不可能的,所以只要还有石头就一定可以取。谁赢谁输取决于石子总数是奇数还是偶数,如果为奇数则第一个取的人会赢,如果为偶数则第二个取的人会赢。那么问题就转化成求石子总数。②用前缀和优化,降低时间复杂度。3、C++代码如下:#include <iostream>using namespace std原创 2020-08-06 21:00:31 · 932 阅读 · 0 评论 -
洛谷 P5638 【CSGRound2】光骓者的荣耀
洛谷 P5638 【CSGRound2】光骓者的荣耀1、题目(来源于洛谷):小 K 打下的江山一共有n个城市,城市 i 和城市 i+1 有一条双向高速公路连接,走这条路要耗费时间a(i)。小 K 为了关心人民生活,决定定期进行走访。他每一次会从1号城市到n号城市并在经过的城市进行访问。其中终点必须为城市n。不仅如此,他还有一个传送器,传送半径为k,也就是可以传送到 i-k 和 i+k 。如果目标城市编号小于1则为1,大于n则为n。但是他的传送器电量不足,只能传送一次,况且由于一些原因,他想尽量快的原创 2020-08-06 20:32:21 · 925 阅读 · 0 评论 -
AcWing 798. 差分矩阵(C++算法)
AcWing 798. 差分矩阵1、题目(来源于AcWing):输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1, y1, x2, y2, c,其中(x1, y1)和(x2, y2)表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上c。请你将进行完所有操作后的矩阵输出。输入格式第一行包含整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含5个整数x1, y1, x2, y2, c,表示一个操作。输出格式共原创 2020-07-15 21:29:36 · 330 阅读 · 1 评论 -
AcWing 797. 差分(C++算法)
AcWing 797. 差分1、题目(来源于AcWing):输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表示一个操作。输出格式共一行,包含n个整数,表示最终序列。数据范围1≤n,m≤100000,1≤l≤r≤n,−1000≤c≤1000,−1000≤整数序列原创 2020-07-15 18:04:57 · 352 阅读 · 0 评论 -
AcWing 796. 子矩阵的和(C++算法)
AcWing 796. 子矩阵的和1、题目(来源于AcWing):输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。输入格式第一行包含三个整数n,m,q。接下来n行,每行包含m个整数,表示整数矩阵。接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。输出格式共q行,每行输出一个询问的结果。数据范围1≤n,m≤1000,1≤q≤200000,1≤原创 2020-07-14 22:48:41 · 1347 阅读 · 0 评论 -
AcWing 795. 前缀和(C++算法)
AcWing 795. 前缀和1、题目(来源于AcWing):输入一个长度为n的整数序列。接下来再输入m个询问,每个询问输入一对l, r。对于每个询问,输出原序列中从第l个数到第r个数的和。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数数列。接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。输出格式共m行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例:5 32 1 3 6 4原创 2020-07-14 16:28:30 · 347 阅读 · 0 评论