【CSP考题扩展】前缀和/差分练习

【深进1.例1 求区间和】

题目描述

给定 n n n 个正整数组成的数列 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots, a_n a1,a2,,an m m m 个区间 [ l i , r i ] [l_i,r_i] [li,ri],分别求这 m m m 个区间的区间和。

对于所有测试数据, n , m ≤ 1 0 5 , a i ≤ 1 0 4 n,m\le10^5,a_i\le 10^4 n,m105,ai104

输入格式

第一行,为一个正整数 n n n

第二行,为 n n n 个正整数 a 1 , a 2 , ⋯ , a n a_1,a_2, \cdots ,a_n a1,a2,,an

第三行,为一个正整数 m m m

接下来 m m m 行,每行为两个正整数 l i , r i l_i,r_i li,ri ,满足 1 ≤ l i ≤ r i ≤ n 1\le l_i\le r_i\le n 1lirin

输出格式

m m m 行。

i i i 行为第 i i i 组答案的询问。

1 ≤ n , m ≤ 1 0 5 1\le n, m\le 10^5 1n,m105 1 ≤ a i ≤ 1 0 4 1 \le a_i\le 10^4 1ai104

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;long long n, m, t, a, b;int main() {cin >> n;vector<int>perfix(n + 1, 0), arr(n);for (size_t i = 0; i < n; i++){cin >> arr[i];}for (size_t i = 0; i < n; i++){perfix[i + 1] = perfix[i] + arr[i];}cin >> m;for (size_t i = 0; i < m; i++){cin >> a >> b;cout << perfix[b] - perfix[a - 1] << endl;}return 0;
}

【最大加权矩形】

题目描述

为了更好的备战 NOIP2013,电脑组的几个女孩子 LYQ,ZSC,ZHQ 认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没有马上答应他们,而是先给她们出了一道数学题,并且告诉她们:你们能获得的运动场地的面积就是你们能找到的这个最大的数字。

校长先给他们一个 n × n n\times n n×n 矩阵。要求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上。从中找一矩形,矩形大小无限制,是其中包含的所有元素的和最大 。矩阵的每个元素属于 [ − 127 , 127 ] [-127,127] [127,127] ,例如

 0 –2 –7  0 9  2 –6  2
-4  1 –4  1 
-1  8  0 –2

在左下角:

9  2
-4  1
-1  8

和为 15 15 15

几个女孩子有点犯难了,于是就找到了电脑组精打细算的 HZH,TZY 小朋友帮忙计算,但是遗憾的是他们的答案都不一样,涉及土地的事情我们可不能含糊,你能帮忙计算出校长所给的矩形中加权和最大的矩形吗?

输入格式

第一行: n n n,接下来是 n n n n n n 列的矩阵。

输出格式

最大矩形(子矩阵)的和。

#include <iostream>
#include <vector>
#include <climits> // For INT_MIN
#include <algorithm>
using namespace std;int n, maxSum = INT_MIN;int main() {cin >> n;vector<vector<int>> matrix(n, vector<int>(n));vector<vector<int>> prefixMatrix(n + 1, vector<int>(n + 1, 0));for (auto& it : matrix) {for (auto& jt : it) {cin >> jt;}}for (size_t i = 1; i < n + 1; i++) {for (size_t j = 1; j < n + 1; j++) {prefixMatrix[i][j] = prefixMatrix[i][j - 1] + prefixMatrix[i - 1][j] - prefixMatrix[i - 1][j - 1] + matrix[i - 1][j - 1];}}// 遍历所有可能的左上角位置for (size_t i = 1; i <= n; i++) {for (size_t j = 1; j <= n; j++) {// 遍历所有可能的右下角位置for (size_t k = i; k <= n; k++) {for (size_t p = j; p <= n; p++) {// 使用前缀和矩阵计算当前矩形的和// sum 表示从 (i, j) 到 (k, p) 形成的矩形的加权和int sum = prefixMatrix[k][p] - prefixMatrix[i - 1][p] - prefixMatrix[k][j - 1] + prefixMatrix[i - 1][j - 1];// 更新最大加权和maxSum = max(maxSum, sum);}}}}cout << maxSum;return 0;
}

【语文成绩】

题目背景

语文考试结束了,成绩还是一如既往地有问题。

题目描述

语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗?

输入格式

第一行有两个整数 n n n p p p,代表学生数与增加分数的次数。

第二行有 n n n 个数, a 1 ∼ a n a_1 \sim a_n a1an,代表各个学生的初始成绩。

接下来 p p p 行,每行有三个数, x x x y y y z z z,代表给第 x x x 个到第 y y y 个学生每人增加 z z z 分。

输出格式

输出仅一行,代表更改分数后,全班的最低分。

#include <iostream>
#include <vector>
#include <climits> // For INT_MIN
#include <algorithm>
using namespace std;long long n, p, x, y, z, minGrade = INT_MAX;int main() {cin >> n >> p;vector<long long>grade(n);vector<long long>diffGrade(n);vector<long long>finalGrade(n);for (size_t i = 0; i < n; i++){cin >> grade[i];}// 构建差分数组diffGrade[0] = grade[0];for (size_t i = 1; i < n; i++){diffGrade[i] = grade[i] - grade[i - 1];}// 批量增减for (size_t i = 0; i < p; i++){cin >> x >> y >> z;diffGrade[x - 1] += z;if (y < n) diffGrade[y] -= z;}// 恢复原数组finalGrade[0] = diffGrade[0];for (size_t i = 1; i < n; i++){finalGrade[i] = finalGrade[i - 1] + diffGrade[i];}for (size_t i = 0; i < n; i++){minGrade = min(minGrade, finalGrade[i]);}cout << minGrade;return 0;
}

【地毯】

题目描述

n × n n\times n n×n 的格子上有 m m m 个地毯。

给出这些地毯的信息,问每个点被多少个地毯覆盖。

输入格式

第一行,两个正整数 n , m n,m n,m。意义如题所述。

接下来 m m m 行,每行两个坐标 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2),代表一块地毯,左上角是 ( x 1 , y 1 ) (x_1,y_1) (x1,y1),右下角是 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)

输出格式

输出 n n n 行,每行 n n n 个正整数。

i i i 行第 j j j 列的正整数表示 ( i , j ) (i,j) (i,j) 这个格子被多少个地毯覆盖。

#include <iostream>
#include <vector>
using namespace std;int n, m, xx1, xx2, yy1, yy2;int main() {cin >> n >> m;vector<vector<int>>diffArea(n, vector<int>(n, 0));vector<vector<int>>resultArea(n, vector<int>(n, 0));for (size_t i = 0; i < m; i++){cin >> xx1 >> yy1 >> xx2 >> yy2;for (size_t i1 = xx1 - 1; i1 < xx2; i1++) // 将二维差分数组视为n个大小为n的一维差分数组{diffArea[i1][yy1 - 1] += 1;if (yy2 < n) diffArea[i1][yy2] -= 1;}}for (size_t i = 0; i < n; i++){resultArea[i][0] = diffArea[i][0];for (size_t j = 1; j < n; j++){resultArea[i][j] = resultArea[i][j - 1] + diffArea[i][j];}}for (auto& it : resultArea) {for (auto& jt : it) {cout << jt << " ";}cout << endl;}return 0;
}

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

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

相关文章

MySQL锁机制

概述 作为一名程序员(我是java开发)&#xff0c;锁是一个绕不开的话题。有读锁、写锁、排他锁、共享锁、红锁、可重入锁、自旋锁、公平锁、乐观锁、分段锁、偏向锁等等&#xff08;其实有些是一个意思&#xff09;。今天这里要说的是Mysql的锁机制(主要是innodb)&#xff0c;涉…

excel导入功能(适用于vue和react都可)

如图所示&#xff08;需求&#xff09;&#xff1a;点击导入excel后&#xff0c;数据自动新增到列表数据内 这里以vue3 andt 为例 template 标签内代码 &#xff1a; <a-uploadname"file":multiple"true":show-upload-list"false":customR…

3.3 ss-sp寄存器,栈的push和pop指令

汇编语言 1. 栈 栈是一种具有特殊的访问方式的存储空间它的特殊性就在于&#xff0c;最后进入这个空间的数据&#xff0c;最先出去。即先进后出 1.1 栈的基本操作 入栈&#xff1a;入栈就是将一个新的元素放到栈顶出栈&#xff1a;出栈就是从栈顶取出一个元素栈顶的元素总是…

C++ 智能指针的正确使用方式:unique_ptr VS shared_ptr

在实际的使用过程中&#xff0c;很多人都会有这样的问题&#xff1a; 不知道智能指针的具体使用场景无脑只使用 shared_ptr认为应该禁用 raw pointer(裸指针&#xff0c;即 Widget * 这种形式)&#xff0c;全部使用智能指针 本文将从这几方面讲解智能指针&#xff1a; 智能指…

Docker简单认识

目录 一、Docker概述 二、容器技术 2.1 容器与虚拟机的比较 2.2 容器和应用程序的比较 三、Docker和容器的关系 四、Docker和操作系统 五、总结 一、Docker概述 Docker 是一个开源的平台&#xff0c;用于开发、运送和运行应用程序。通过使应用程序与底层系统隔离&#x…

过滤器Filter和数组的filter()方法

在使用vue中的过滤器中的时候忽然想到数组中的fiter()方法&#xff0c;不禁想总结一下两者的用法和实现。 过滤器 在 Vue.js 中&#xff0c;过滤器是用于在模板中对数据进行格式化的一种机制。过滤器通过管道符 | 连接到表达式&#xff0c;例如&#xff1a; {{ message | filt…

服务雪崩,熔断,降级,限流之理解

服务雪崩是现状。 通过限流&#xff0c;熔断&#xff0c;降级等方式可以处理雪崩的问题。 服务限流&#xff0c;主要是为了保护服务的正常运行&#xff0c;大量请求过来&#xff0c;忙不过来&#xff0c;起码服务还能用。 服务熔断&#xff0c;是因为大量请求大多数失败或者…

机器学习常用框架

机器学习是人工智能的一个重要分支&#xff0c;它通过让计算机系统利用数据自我学习来改进任务执行的能力。在机器学习领域&#xff0c;有许多成熟的框架被广泛使用&#xff0c;这些框架提供了构建和训练机器学习模型的工具。以下是一些常用的机器学习框架&#xff1a; Tensor…

第2章 信息技术基础

本章学习要点 全面了解医院信息系统建设所涉及的主要信息技术以及这些技术的应用情况。 计算机与网络、信息技术与信息系统、数字媒体与数据存储技术、条形码(二维码)、RFID技术、云计算、APP技术 1.XML 可扩展标记语言与Access&#xff0c;Oracle和SQL Server等数据库不同…

【机器学习-01】机器学习基本概念与建模流程

机器学习的过程本质上是一个不断通过数据训练来提升模型在对应评估指标上表现的过程。在此过程中&#xff0c;为模型提供有效的反馈并基于这些反馈进行持续的调整是至关重要的。只有当这个过程顺利进行时&#xff0c;模型才能得到有效的训练&#xff0c;机器才能真正实现学习。…

修改vscode中代码的注释颜色

打开C盘、进入user目录&#xff0c;然后依次打开以下图片中的文件夹&#xff0c;在指定的文件中进行修改。 1. 2. 3. 4. 5. 6.

2049.不容易系列之(4)——考新郎

2048的升级 当nm时则全排错&#xff0c;与上题一样 当n>m时&#xff0c;则有n-m个是排对的&#xff0c;剩下m个全错 import java.util.*;public class Main {public static void main(String[] args) {Scanner scannernew Scanner(System.in);int num scanner.nextInt()…

解决ubuntu 22.04新内核6.5.0-15无法编译NVIDIA显卡驱动

这里的新内核应该包括6.5.*系列的 文章目录 遇到的问题&#xff1a; 遇到的问题&#xff1a; 今天我在安装NVIDIA显卡驱动发现了一个问题&#xff0c;主要日志如下所示&#xff1a; make[3]: *** [scripts/Makefile.build:251: /tmp/selfgz1310041/NVIDIA-Linux-x86_64-550.5…

昂贵的日用品和廉价的奢侈品

不同消费支出的心理账户之间具有非替代性 不同的消费支出分置在不同的心理账户中&#xff0c;不同消费心理账户的开支会受到所在账户预算约束的影响。 心理账户的预算控制机制 人们在分配总预算时&#xff0c;会将预算分门别类地分配到具体的心理账户中去。对于所有超过心理账…

【Docker】apisix 容器化部署

APISIX环境标准软件基于Bitnami apisix 构建。当前版本为3.8.0 你可以通过轻云UC部署工具直接安装部署&#xff0c;也可以手动按如下文档操作&#xff0c;该项目已经全面开源&#xff0c;可以从如下环境获取 配置文件地址: https://gitee.com/qingplus/qingcloud-platform qi…

Python+requests+excel 接口自动化测试框架

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、接口自动化测试框架 二、工程目录 三、Excel测试用例设计 四、基础数据base 封装post/get&a…

centos7磁盘管理,lvm挂载、扩容

一、centos7 磁盘挂载 默认盘符格式 centos7 默认文件格式xfscentos6 默认文件格式ext4centos5 默认文件格式ext3 1、/dev/vdb和/dev/mapper/lvm-data对比 1&#xff09;/dev/vdb /dev/vdb通常表示一个裸的块存储设备&#xff0c;比如一个硬盘或者虚拟机中的一个虚拟硬盘。…

【图像分类】基于深度学习的人脸表情识别(开心、悲伤、生气三个类别,ResNet网络)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内,不想订阅专栏的兄弟们可以私信…

Uni-app跟学笔记(五):uni-ui组件库的使用、项目打包(小程序、h5、APP)

文章目录 1&#xff09;uni-ui组件库的使用2&#xff09;项目打包1&#xff1a;微信小程序打包2&#xff1a;h5打包3&#xff1a;安卓打包 本博客为 uni-app 此门课的跟学笔记&#xff0c;目的是便于个人复习和对知识快速索引&#xff0c;源码素材可在均可在视频评论区找到 1&a…

C语言函数—递归理解和练习

练习&#xff1a; 编写函数不允许创建临时变量&#xff0c;求字符串的长度。 我们看到这道题&#xff0c;第一个想到的是不是strlen int main() {char[] "bit";//[b][i][t][\0]//里面一共4个字符&#xff08;包括结尾的、0&#xff09;但是我们的strlen函数并不会计…