语文成绩(差分)

news/2024/11/17 16:27:00/文章来源:https://www.cnblogs.com/phuzzz/p/18550681

语文成绩

题目背景

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

题目描述

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

输入格式

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

第二行有 \(n\) 个数,\(a_1 \sim a_n\),代表各个学生的初始成绩。

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

输出格式

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

样例 #1

样例输入 #1

3 2
1 1 1
1 2 1
2 3 1

样例输出 #1

2

提示

对于 \(40\%\) 的数据,有 \(n \le 10^3\)

对于 \(60\%\) 的数据,有 \(n \le 10^4\)

对于 \(80\%\) 的数据,有 \(n \le 10^5\)

对于 \(100\%\) 的数据,有 \(n \le 5\times 10^6\)\(p \le n\),学生初始成绩 $ \le 100\(,\)z \le 100$。






题解

一遍过什么的也太爽了吧? ˃̶͈ ꇴ ˂̶͈

差分

毕竟是第一次学差分,还是讲一下差分的概念:

对于一个数组arr[ i ],差分即是diff[ i ] = arr[ i ] - arr[ i - 1 ]。(其中arr[ 0 ] = 0)

依此定义,通过 前缀和 可以将 差分 转换成 原数组。如下。

arr[0] = diff[0] = 0;
arr[1] = diff[1] + diff[0];
arr[2] = diff[2] + diff[1] + diff[0];
arr[3] = diff[3] + diff[2] + diff[1] + diff[0];
arr[4] = diff[4] + diff[3] + diff[2] + diff[1] + diff[0];
... ...

借此,我们可以轻松利用 差分 来批量调节原数组的数据。
例如:将 diff[ 2 ] 增加 2。会有如下效果。(brr[ i ]为新数组)

brr[0] = arr[0]     = diff[0] = 0;
brr[1] = arr[1]     = diff[1] + diff[0];
brr[2] = arr[2] + 2 = diff[2] + 2 diff[1] + diff[0];
brr[3] = arr[3] + 2 = diff[3] + diff[2] + 2 diff[1] + diff[0];
brr[4] = arr[4] + 2 = diff[4] + diff[3] + diff[2] + 2 + diff[1] + diff[0];
... ...

可见原数组从 arr[ 2 ] 这项开始,每项都增加了2。

我们也可以让diff[ 4 ] 减去2,来确保只有arr[ 2 ]和arr[ 3 ]的数据发生变化。

brr[0] = arr[0]     = diff[0] = 0;
brr[1] = arr[1]     = diff[1] + diff[0];
brr[2] = arr[2] + 2 = diff[2] + 2 diff[1] + diff[0];
brr[3] = arr[3] + 2 = diff[3] + diff[2] + 2 diff[1] + diff[0];
brr[4] = arr[4]     = diff[4] - 2 + diff[3] + diff[2] + 2 + diff[1] + diff[0];
brr[5] = arr[5]     = diff[5] + diff[4] - 2 + diff[3] + diff[2] + 2 + diff[1] + diff[0];
... ...

代码

#include <iostream>
using namespace std;const int MAXN = 5 * 1e6 + 10;int arr[MAXN], diff[MAXN];
int main()
{int n, p;// n为学生数,p为加分次数scanf("%d%d", &n, &p);// 输入每个学生的初始成绩,并计算差分数组for (int i = 1; i <= n; i++){scanf("%d", &arr[i]);diff[i] = arr[i] - arr[i - 1];}while (p--){int x, y, z; //x表示起始学生,y表示结束学生,z表示增加的分数scanf("%d%d%d", &x, &y, &z);diff[x] += z; // 从第x个学生的成绩开始增加zdiff[y + 1] -= z;// 从第y+1个学生的成绩开始减少z,确保只对x到y的学生有效}int min = 100; int tmp = 0;// 临时变量,用来累计当前成绩for (int i = 1; i <= n; i++){tmp += diff[i];// 更新最小成绩min = (min < tmp) ? min : tmp;}printf("%d\n", min);return 0;
}

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

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

相关文章

猿人学web端爬虫攻防大赛赛题第20题——2022新春快乐

题目网址:https://match.yuanrenxue.cn/match/20 解题步骤解题之前需要先了解wasm是什么:https://docs.pingcode.com/ask/294587.html看数据包。sign是一串加密的字符串,t一看就是时间戳。全局搜索api/match/20,只有一处。打断点,触发。看下sign的生成逻辑。 "sign&q…

[Tricks-00004]CF1954F(自己胡的 trick,被 Burnside 完爆)

介绍下自己的离奇思路: 先读清楚题意!要求是旋转等价,即两个以 \(c\) 个 \(1\) 开头,总 \(1\) 个数不超过 \(k+c\) 的字符串算一种。 那怎么刻画"只算一种"这个条件呢?一个想法可以是,对每个字符串赋一个权值,一种字符串的权值即旋转出来的每个合法的,把它们…

工控机维修数据恢复

工控机是一种加固的增强型个人计算机,由于经常在环境比较恶劣的情况下运行,对数据的安全性要求也更高。 一、数据丢失的原因 用户误操作:如错误删除文件、不小心切断电源等,这些操作可能导致数据丢失或损坏。 入侵与感染:恶意程序可能破坏硬盘数据,甚至具有格式硬盘的功能…

RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配

RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配 Text Embedding 榜单:MTEB、C-MTEB 《MTEB: Massive Text Embedding Benc…

Golang的GMP调度模型与源码解析

0、引言 我们知道,这当代操作系统中,多线程和多进程模型被广泛的使用以提高系统的并发效率。随着互联网不断的发展,面对如今的高并发场景,为每个任务都创建一个线程是不现实的,使用线程则需要系统不断的在用户态和内核态之间不断的切换,引起不必要的损耗,于是引入了协程…

有限状态机(FSM)的使用

有限状态机的使用 有限状态机在游戏制作中十分常见,它既可以作为玩家角色的控制框架,纯代码控制动画的播放,免去动画间的“连连看”;也可以制作简单的AI,甚至还可以搭配其它AI决策方式做出更复杂易用的AI控制……本文仅是个人对有限状态机的理解,与大家一同交流有限状态机…

【学习篇】patran设置阻尼

在数学和力学甚至机械专业中,质量-弹簧-阻尼系统是基础、经典的模型。其数学模型表示为: $$ m\ddot{x} +c\dot{x} +kx = 0 \qquad(1) $$ 有限元模型比较简单,就是两个质量点+弹簧假设上述式子的初值为 $$ \begin{cases} u(0)=0.2 \ \dot{u}(0)=0 \end{cases} $$ 各项系数为变…

mysql 查询每个订单总价和购买商品的总类数

数据表 CREATE TABLE goods ( order_id INT NOT NULL, goods_id INT NOT NULL, price DECIMAL(10, 2) NOT NULL ); 插入数据 INSERT INTO goods (order_id, goods_id, price) VALUES (1, 1, 3.5), (1, 2, 4.0), (2, 4, 6.0); 数据查询 SELECT order_id, SUM(price) AS total_pr…

【视频讲解】Python深度神经网络DNNs-K-Means(K-均值)聚类方法在MNIST等数据可视化对比分析

全文链接:https://tecdat.cn/?p=38289 原文出处:拓端数据部落公众号 分析师:Cucu Sun 近年来,由于诸如自动编码器等深度神经网络(DNN)的高表示能力,深度聚类方法发展迅速。其核心思想是表示学习和聚类可以相互促进:好的表示会带来好的聚类效果,而好的聚类为表示学习提…

时间

JDK7 时间 全世界的时间, 有一个统一的计算标准. 格林尼治时间/格林威治时间 (Greenwich Mean Time) 简称 GMT. 计算核心: 地球自转一天是 24 小时, 太阳直射时为正午 12 点. 后来发现计算误差较大, 现在格林威治时间已经不再作为标准时间来使用了. 到了 2012 年 1 月, 取消了用…

贴代码框架PasteForm特性介绍之markdown和richtext

简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管理端只有Html+js版本的,后续将支持小程序,Vue等 案例源码 案例源…