算法日记——前缀和、差分

文章目录

    • 洛谷 B3612 求区间和
    • 洛谷 P1387 最大正方形
    • 洛谷 P3397 地毯

洛谷 B3612 求区间和

题目链接:洛谷 B3612 求区间和
思路: 一维前缀和的模板题。所谓前缀和,就是对原数组前i个元素求和,这个值作为新元素放在下标i的位置。
代码如下:

#include <iostream>
using namespace std;
const int N = 1e5 + 5;
int a[N], sum[N];
int main()
{int n, m;cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];sum[i] += sum[i - 1] + a[i];}cin >> m;while (m--){int l, r;cin >> l >> r;cout << sum[r] - sum[l - 1] << endl;}return 0;
}
  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( n ) O(n) O(n)

洛谷 P1387 最大正方形

题目链接: 洛谷 P1387 最大正方形
思路: 本题有两种方法,一种是利用二位前缀和,另一种是利用动态规划。
代码如下:
(前缀和)

#include <iostream>
using namespace std;
int n, m;
const int N = 105;
int a[N][N], s[N][N]; 
int ans;//保存最大边长
int main()
{cin >> n >> m;for(int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j++){cin >> a[i][j];s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];}//枚举起点和边长for(int i = 1; i <= n; i ++ )for(int j = 1; j <= m; j ++ )for (int l = 1; l <= min(n, m); l ++ ){int x = i + l - 1, y = j + l - 1;//正方形右下角坐标if (x > n || y > m || s[x][y] - s[x][j - 1] - s[i - 1][y] + s[i - 1][j - 1] != l * l) {break;}if (ans < l) ans = l;}cout << ans << endl;return 0;
}
  • 时间复杂度 O ( m n l ) O(mnl) O(mnl)
  • 空间复杂度 O ( n 2 ) O(n^2) O(n2)

(动态规划)

#include <iostream>
#include<algorithm>
using namespace std;
const int N = 105;
int a[N][N], f[N][N]; //f[i][j]表示以节点i, j为右下角,可构成的最大正方形的边长。
int ans;
int main()
{int n, m;cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){cin >> a[i][j];if (a[i][j] == 1) {f[i][j] = min(f[i - 1][j - 1], min(f[i - 1][j], f[i][j - 1])) + 1;}ans = max(ans, f[i][j]);}cout << ans << endl;return 0;
}
  • 时间复杂度 O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度 O ( n 2 ) O(n^2) O(n2)

洛谷 P3397 地毯

题目链接: 洛谷 P3397 地毯
思路: 算是二维差分的模板题吧。所谓差分也就是前缀和的逆运算,也就是说,我们对差分数组求前缀和后得到的数组就是原数组。
代码如下:

#include <iostream>
#include<algorithm>
using namespace std;
const int N = 1005;
int n, m;
int b[N][N], s[N][N];//b为差分数组,s为原数组(对差分数组求前缀和)int main()
{cin >> n >> m;while (m--){int x1, y1, x2, y2;cin >> x1 >> y1 >> x2 >> y2;b[x1][y1] += 1;b[x1][y2 + 1] -= 1;b[x2 + 1][y1] -= 1;b[x2 + 1][y2 + 1] += 1;}for(int i = 1; i <= n; i ++ )for (int j = 1; j <= n; j++){s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + b[i][j];}for (int i = 1; i <= n; i ++ ) {for (int j = 1; j <= n; j ++ )cout << s[i][j] << " ";cout << endl;}return 0;
}
  • 时间复杂度 O ( m n + n 2 ) O(mn+n^2) O(mn+n2)
  • 空间复杂度 O ( n 2 ) O(n^2) O(n2)

总结: 对于前缀和、差分来说,一般比赛时不会直接作为考点,而是融合在其他类型题目中:比如利用前缀和、差分来对初始数组进行操作,从而方便我们解决问题。

最后,如果文章有错误,请在评论区或私信指出,让我们共同进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++智能指针_C++回顾

发展历史 C98中产生了第一个智能指针auto_ptr&#xff1b; Cboost给出了更实用的scoped_ptr和shared_ptr和weak_ptr&#xff1b; CTR1&#xff0c;引入了shared_ptr等&#xff0c;不过TR1并不是标准版&#xff1b; C11引入了unique_ptr和shared_ptr和weak_ptr。需要注意的是…

Mamba与MoE架构强强联合,Mamba-MoE高效提升LLM计算效率和可扩展性

论文题目&#xff1a; MoE-Mamba: Efficient Selective State Space Models with Mixture of Experts 论文链接&#xff1a; https://arxiv.org/abs/2401.04081 代码仓库&#xff1a; GitHub - llm-random/llm-random 作为大型语言模型&#xff08;LLM&#xff09;基础架构的后…

新一代科学计算与系统建模仿真平台MWORKS 2024a震撼发布:产品强势进化,更新亮点速览!

2月25日&#xff0c;同元软控成功举办MWORKS 2024产品发布会&#xff0c;会上公布了新版MWORKS的设计理念、关键技术、版本亮点、产品特性以及重大改进。当前&#xff0c;科学计算与系统建模仿真平台MWORKS 2024a已正式上线&#xff0c;开放下载。 MWORKS已成为全球第4个完整的…

全量知识系统问题及SmartChat给出的答复 之6 三套工具之1

Q15. 提出想法和问题 前面说过&#xff0c;DDD在我要设计的全量知识系统中位于中间层&#xff0c;是专门用来解决“知识汤”问题的。 解决的思路就是以将为在特定领域中的公司经营提供一个责任-权限平面为目的&#xff0c;帮助他们调整商业模式以及组建恰当的组织&#xff0c…

C# 高阶语法 —— Winfrom链接SQL数据库的存储过程

存储过程在应用程序端的使用的优点 1 如果sql语句直接写在客户端&#xff0c;以一个字符串的形式体现的&#xff0c;提示不友好&#xff0c;会导致效率降低 2 sql语句写在客户端&#xff0c;可以利用sql注入进行攻击&#xff0c;为了安全性&#xff0c;可以把sql封装在…

嘉立创专业版导入SW模型的板框

1、SW新建一个需要的模型&#xff0c;例如下图&#xff0c; 2、点击另存为.dxf 文件&#xff08;是.dxf文件&#xff09; 3、选择要保存模型的视图&#xff0c;如上视图&#xff0c;确定后出现上视图板框形状&#xff0c;然后保存即可。 4、打开嘉立创&#xff0c;点击文件——…

Linux中的awk命令

AWK是一种在Linux系统中经常使用的文本处理工具&#xff0c;它可以根据指定的模式对文本文件进行处理和分析。下面是一些关于AWK命令的使用说明和举例&#xff1a; 1. 基本语法&#xff1a; awk pattern { action } file 2. 使用字段分隔符&#xff1a; 默认情况下&#xf…

整数编码【华为OD机试-JAVAPythonC++JS】

题目描述 实现一种整数编码方法&#xff0c;使得待编码的数字越小&#xff0c;编码后所占用的字节数越小。 编码规则如下: 编码时7位一组&#xff0c;每个字节的低7位用于存储待编码数字的补码 字节的最高位表示后续是否还有字节&#xff0c;置1表示后面还有更多的字节&#xf…

pytorch -- GPU优化写法套路

1. GPU优化的点 网络模型 数据&#xff08;输入、标注) 损失函数 .cuda方式 代码&#xff1a; import torch.optim import torchvision from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter# 1. 准备数据集 t…

C++实现XOR加解器

#include <Windows.h> #include <iostream> #include <fstream> #include <string>// 加解密函数&#xff0c;使用XOR运算 void XORCrypt(char* data, int size, const std::string& key) {int keyLength key.length();for (int i 0; i < siz…

日志系统项目实现

日志系统的功能也就是将一条消息格式化后写入到指定位置&#xff0c;这个指定位置一般是文件&#xff0c;显示器&#xff0c;支持拓展到数据库和服务器&#xff0c;后面我们就知道如何实现拓展的了&#xff0c;支持不同的写入方式(同步异步)&#xff0c;同步:业务线程自己写到文…

万卡集群:字节搭建12288块GPU的单一集群

文章目录 论文Reference 论文 MegaScale: Scaling Large Language Model Training to More Than 10,000 GPUs 论文链接&#xff1a;https://arxiv.org/abs/2402.15627 从结构上讲&#xff0c;网络是基于Clos的“胖树”结构。其中一个改进是在顶层交换机上把上行与下行链路分开&…

三、《任务列表案例》前端程序搭建和运行

本章概要 整合案例介绍和接口分析 案例功能预览接口分析 前端工程导入 前端环境搭建导入前端程序 启动测试 3.1 整合案例介绍和接口分析 3.1.1 案例功能预览 3.1.2 接口分析 学习计划分页查询 /* 需求说明查询全部数据页数据 请求urischedule/{pageSize}/{currentPage} 请…

stm32触发硬件错误位置定位

1.背景 1. 项目中&#xff0c;调试过程或者测试中都会出现程序跑飞问题&#xff0c;这个时候问题特别难查找。 2. 触发硬件错误往往是因为内存错误。这种问题特别难查找&#xff0c;尤其是产品到了测试阶段&#xff0c;而这个异常复现又比较难的情况下&#xff0c;简直头疼。…

初学JavaScript总结

0 JavaScript html完成了架子&#xff0c;css做了美化&#xff0c;但是网页是死的&#xff0c;需要给他注入灵魂&#xff0c;所以接下来需要学习JavaScript&#xff0c;这门语言会让页面能够和用户进行交互。JavaScript又称为脚本语言&#xff0c;可以通过脚本实现用户和页面的…

每日shell脚本之打印99乘法表

每日shell脚本之打印99乘法表 #!/bin/bash for i in $(seq 1 9); dofor j in $(seq 1 9); doecho -n "$i * $j $(($i * $j)) "doneecho done

Programming Abstractions in C阅读笔记:p306-p307

《Programming Abstractions in C》学习第75天&#xff0c;p306-p307总结&#xff0c;总计2页。 一、技术总结 1.Quicksort algorithm(快速排序) 由法国计算机科学家C.A.R(Charles Antony Richard) Hoare&#xff08;东尼.霍尔&#xff09;在1959年开发(develop), 1961年发表…

Mac 制作可引导安装器

Mac 使用U盘或移动固态硬盘制作可引导安装器&#xff08;以 Monterey 为例&#xff09; 本教程参考 Apple 官网相关教程 创建可引导 Mac OS 安装器 重新安装 Mac OS 相关名词解释 磁盘分区会将其划分为多个单独的部分&#xff0c;称为分区。分区也称为容器&#xff0c;不同容器…

VR虚拟现实技术应用到猪抗原体检测的好处

利用VR虚拟仿真技术开展猪瘟检测实验教学确保生猪产业健康发展 为了有效提高猪场猪瘟防控意识和检测技术&#xff0c;避免生猪养殖业遭受猪瘟危害&#xff0c;基于VR虚拟仿真技术开展猪瘟检测实验教学数据能大大推动基层畜牧养殖业持续稳步发展保驾护航。 一、提高实验效率 VR虚…

鲲鹏arm64架构下安装KubeSphere

鲲鹏arm64架构下安装KubeSphere 官方参考文档: https://kubesphere.io/zh/docs/quick-start/minimal-kubesphere-on-k8s/ 在Kubernetes基础上最小化安装 KubeSphere 前提条件 官方参考文档: https://kubesphere.io/zh/docs/installing-on-kubernetes/introduction/prerequi…