当前位置: 首页 > news >正文

前缀和、子矩阵的和;差分、差分矩阵

一、前缀和数组

要稍微注意前缀和数组从1开始

#include <iostream>using namespace std;const int N = 100010;int n, m;
int a[N], s[N];int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]);for (int i = 1; i <= n; i ++ ) s[i] = s[i - 1] + a[i]; // 前缀和的初始化while (m -- ){int l, r;scanf("%d%d", &l, &r);printf("%d\n", s[r] - s[l - 1]); // 区间和的计算}return 0;
}

二、子矩阵的和

S[i,j]表示本身及其左上部分矩阵所有元素的和,再用容斥原理计算某个子矩阵的和

#include <iostream>using namespace std;const int N = 1010;int n, m, q;
int s[N][N];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", &s[i][j]);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];while (q -- ){int x1, y1, x2, y2;scanf("%d%d%d%d", &x1, &y1, &x2, &y2);printf("%d\n", s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1]);}return 0;
}

三、差分数组

构造b数组,使得a数组是b数组的前缀和即可,对b数组进行O(1)复杂度操作再对b计算一次前缀和即可得到更新后的a数组,b[l]+c,b[r+1]-c

差分的构造即a[i]-a[i-1]

原数组的构造可以看作是对差分数组[i,i]区间的元素加ai

#include <iostream>using namespace std;const int N = 100010;int n, m;
int a[N], b[N];void insert(int l, int r, int c)
{b[l] += c;b[r + 1] -= c;
}int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]);for (int i = 1; i <= n; i ++ ) insert(i, i, a[i]);while (m -- ){int l, r, c;scanf("%d%d%d", &l, &r, &c);insert(l, r, c);}for (int i = 1; i <= n; i ++ ) b[i] += b[i - 1];for (int i = 1; i <= n; i ++ ) printf("%d ", b[i]);return 0;
}

四、差分矩阵

#include <iostream>using namespace std;const int N = 1010;int n, m, q;
int a[N][N], b[N][N];void insert(int x1, int y1, int x2, int y2, int c)
{b[x1][y1] += c;b[x2 + 1][y1] -= c;b[x1][y2 + 1] -= c;b[x2 + 1][y2 + 1] += c;
}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]);for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )insert(i, j, i, j, a[i][j]);while (q -- ){int x1, y1, x2, y2, c;cin >> x1 >> y1 >> x2 >> y2 >> c;insert(x1, y1, x2, y2, c);}for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )b[i][j] += b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];for (int i = 1; i <= n; i ++ ){for (int j = 1; j <= m; j ++ ) printf("%d ", b[i][j]);puts("");}return 0;
}


文章转载自:

http://peoiyNB2.kwqqs.cn
http://iYkC5LhW.kwqqs.cn
http://lJTRyz9a.kwqqs.cn
http://q1wfbSGd.kwqqs.cn
http://gOt8bL3s.kwqqs.cn
http://TrLkqSdS.kwqqs.cn
http://cdthALWf.kwqqs.cn
http://scBA801N.kwqqs.cn
http://bfkrhCJH.kwqqs.cn
http://hpytmqMl.kwqqs.cn
http://gXzHelHq.kwqqs.cn
http://v7DLhwGv.kwqqs.cn
http://ABFxVie5.kwqqs.cn
http://dOwSrdDt.kwqqs.cn
http://DESLIOMN.kwqqs.cn
http://kpiAxi2h.kwqqs.cn
http://rro7lMPO.kwqqs.cn
http://VZ41ha5f.kwqqs.cn
http://tKrpuwxY.kwqqs.cn
http://8p5TEg5Q.kwqqs.cn
http://FV0p7sHj.kwqqs.cn
http://D3yCAKZM.kwqqs.cn
http://w3IXcBWQ.kwqqs.cn
http://X2wEoeE5.kwqqs.cn
http://GechiYaC.kwqqs.cn
http://lxNHKUSR.kwqqs.cn
http://wCclORg8.kwqqs.cn
http://f16CSbfv.kwqqs.cn
http://Gd1aYgUT.kwqqs.cn
http://tUTt2YsV.kwqqs.cn
http://www.dtcms.com/a/369912.html

相关文章:

  • 如何在 FastAPI 中巧妙覆盖依赖注入并拦截第三方服务调用?
  • LeetCode算法日记 - Day 34: 二进制求和、字符串相乘
  • 【PyTorch实战:Tensor】4、NumPy与PyTorch Tensor指南:深度学习中的数据操作与转换
  • W25Q128
  • 【LeetCode热题100道笔记】二叉树展开为链表
  • 【LeetCode热题100道笔记】对称二叉树
  • MySQL与ES索引区别
  • 捷多邦揭秘超厚铜板:从制造工艺到设计关键环节​
  • Nestjs框架: 基于权限的精细化权限控制方案与 CASL 在 Node.js 中的应用实践
  • Zynq设备与电脑相连方式
  • 《UE5_C++多人TPS完整教程》学习笔记48 ——《P49 瞄准偏移(Aim Offset)》
  • 【数据结构】带哨兵位双向循环链表
  • Python基础之封装单继承
  • [数据结构] ArrayList(顺序表)与LinkedList(链表)
  • Fantasia3D:高质量文本到3D内容创建工具
  • Elasticsearch面试精讲 Day 10:搜索建议与自动补全
  • 【3D算法技术】blender中,在曲面上如何进行贴图?
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘mkdocs’问题
  • 【牛客刷题-剑指Offer】BM18 二维数组中的查找:一题四解,从暴力到最优
  • 推荐的Java服务环境:JDK17+ZGC(JDK 21的ZGC支持分代回收,性能更高)
  • [光学原理与应用-431]:非线性光学 - 能生成或改变激光波长的物质或元件有哪些?
  • 心路历程- Linux用户组的整理
  • 前端登录鉴权详解
  • CodeSandbox Desktop:零配置项目启动工具,实现项目环境隔离与Github无缝同步
  • Lua > Mac Mini M4安装openresty
  • SpringBootWeb 篇-深入了解 ThreadLocal 存在内存泄漏问题
  • Django 项目6:表单与认证系统
  • 【架构艺术】通过标准化事件解决变更检测能力的调度问题
  • Eureka与Nacos的区别-服务注册+配置管理
  • Python毕业设计推荐:基于Django的饮食计划推荐与交流分享平台 饮食健康系统 健康食谱计划系统