基本算法——前缀和与差分
一、前缀和
一维前缀和
顾名思义,不再赘述。
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int N =1e6+10; int n,m; int a[N],sum[N];int main() {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);sum[i]=sum[i-1]+a[i];}while(m--){int l,r;scanf("%d%d",&l,&r);printf("%d\n",sum[r]-sum[l-1]);}return 0; }
二维前缀和
类似于容斥原理,手动画图很好理解。
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; const int N = 1010; int a[N][N],sum[N][N]; int n,m,q; int main() {scanf("%d%d%d",&n,&m,&q);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];}while(q--){int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);printf("%d\n",sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1]);}return 0; }
二、差分
差分可以说是前缀和的逆运算。
设原序列为a1,a2,…an,则该序列的差分序列b1,b2,…,bn满足如下条件:ai = b1 + b2 + … + bi。
一维差分
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int N = 1e5+10; int a[N],b[N]; int n,q; int main() {scanf("%d%d",&n,&q);for(int i=1;i<=n;i++){scanf("%d",&a[i]);b[i]=a[i]-a[i-1];}while(q--){int l,r,c;scanf("%d%d%d",&l,&r,&c);b[l]+=c;b[r+1]-=c;}int sum=0;for(int i=1;i<=n;i++){sum+=b[i];printf("%d ",sum);}return 0; }
二维差分
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int N =1010; int a[N][N],b[N][N]; int n,m,q; int main() {scanf("%d%d%d",&n,&m,&q);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);b[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1];}while(q--){int x1,y1,x2,y2,c;scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&c);b[x1][y1]+=c;b[x2+1][y1]-=c;b[x1][y2+1]-=c;b[x2+1][y2+1]+=c;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+b[i][j];printf("%d ",a[i][j]);}printf("\n");}return 0; }
附链接
一维前缀和
二维前缀和
一维差分
二维差分
转载于:https://www.cnblogs.com/ninedream/p/11537576.html
基本算法——前缀和与差分相关推荐
- 0x03.基本算法 — 前缀和与差分
目录 一.前缀和 二.二维前缀和 1.二维前缀和的修改和求和 0. NOI 2003激光炸弹(二维前缀和) 1.牛妹吃豆子(二维前缀和模板,修改+求和) 2.静态数组的区间求和问题 3.静态维护区间加 ...
- c++算法基础必刷题目——前缀和与差分
文章目录 前缀和与差分算法: 1.校门外的树 2.值周 3.中位数图 4.激光炸弹 5.二分 6.货仓选址 前缀和与差分算法: 前缀和与差分算法主要是为了快速求出某个区间的和,例如有一个数组a[1 ...
- Acwing算法基础【1】基础(三)前缀和与差分
目录 三.前缀和与差分 3.1 前缀和 3.1.1 一维前缀和的算法思想 3.1.2 一维前缀和的代码实现 3.1.3 二维前缀和的基本思想 3.1.4 二维前缀和的代码实现 3.2 差分 3.2.1 ...
- 基本算法之前缀和与差分的是使用
前缀和与差分 前缀和 鸣谢 二维前缀和 激光炸弹 差分 求差分 差分求区间修改 增减序列 最高的牛 前缀和 鸣谢 添加链接描述 和 添加链接描述 二维前缀和 激光炸弹 题目链接 解题思路: 解法思路: ...
- 前缀和,差分算法训练
知识点: 一维前缀和 二维前缀和 一维差分 二维差分 题目: 蓝桥杯2017初赛-k倍区间-前缀和 [蓝桥杯2018初赛]递增三元组-双指针,枚举,排序,前缀和
- 算法基础(2) | 高精度、前缀和、差分
文章目录 一.高精度 1.1 高精度加法 1.2 高精度减法 1.3 高精度乘法 1.4 高精度除法 二.前缀和 2.1 一维前缀和 2.2 二前缀和 三.差分 3.1 一维差分 3.2 二维差分 四 ...
- 基础算法(二):高精度/前缀和与差分
目录 一.高精度 加法高精度 减法高精度 乘法高精度(大数乘以小数) 除法高精度(高精度整数除以低精度整数) 二.前缀和与差分 一维前缀和 二维前缀和 差分 二维差分 一.高精度 数组下标低位存储数字 ...
- 信奥中的数学:前缀和与差分、大整数开方技巧
[算法2-1]前缀和与差分 [算法2-1]前缀和与差分 - 题单 - 洛谷 前缀和与差分 图文并茂 超详细整理(全网最通俗易懂) 前缀和与差分 图文并茂 超详细整理(全网最通俗易懂)_林深不见鹿 的博 ...
- 前缀和与差分 图文并茂 超详细整理(全网最通俗易懂)
目录 1.前缀和 2.前缀和算法有什么好处? 3.二维前缀和 4.差分 5.一维差分 6.二维差分 1.前缀和 前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的 ...
最新文章
- RabbitMQ(九):RabbitMQ 延迟队列,消息延迟推送(Spring boot 版)
- canvas三角函数模拟水波效果
- tensorflow笔记
- 对比学习效果差?谷歌提出弱语义负样本,有效学习高级特征!
- matplotlib的colorbar设置显示的刻度个数和指定的刻度值
- php限制ip访问次数 并发_PHP实现redis限制单ip、单用户的访问次数功能示例
- 树的几种遍历方式(递归/非递归)
- MFC使用简单总结(便于以后查阅)
- 【小工匠聊Modbus】07-错误响应
- native react 更新机制_React Native 热更新实现(客户端 + 服务器端)
- 测试用例之黑盒测试方法
- java实现串口通信 485协议
- Android 自定义表格(第一行及第一列固定,其他列可滑动)
- Upgraded Edition
- .Net学习平台有很多,最快捷的是在这里?
- 计算机科学家安内尔,历届诺贝尔生理学或医学奖获奖者简介
- W ndows7安装Hp1020,Windows7系统怎么安装惠普hp1020打印机
- 帝国时代3亚洲王朝怎么控制军营训练其它文明的兵种
- python中pip下载的代理设置
- 涂抹式水光针的使用方法你知道吗?
热门文章
- 批量文件中加前缀、word删除空白行、删除含有某一个首字母的行
- winx修改计算机用户名,怎么修改我的电脑用户名win10
- vue 手动挂载组件 手动销毁组件_javascript原生手动分页组件
- php表示昨天_php获取今天、昨天、明天的日期
- wpsoffice安卓历史版本_安装老版本的手机APP
- 手机修图软件测试,照片秒变高清修图软件APP
- linux虚拟智能系统下载,RT-Thread v2.1.0alpha 技术预览,智能设备操作系统
- linux 深度 root,深度刷机让毫秒级一键ROOT成为现实
- 华为又对这一领域下手了,网友:太难了……
- 同盾“声纹识别建模大赛”首榜揭晓,成绩已达工业级一流水平!