第十四届蓝桥杯省赛C++B组H题【整数删除】题解(AC)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目大意

依次删除长度为 n n n 的数组中的 k k k 个最小值,在删除一个数后,该数的相邻数加上它的值,输出最终数组。

解题思路

数组中删除一个数的复杂度为 O ( n ) O(n) O(n),故我们可以考虑用链表进行维护,这样删除一个数的时间复杂度为 O ( 1 ) O(1) O(1)

在一个无序数组中查找最小值,我们可以考虑将数组的元素都放进堆里。

删除一个数时,会导致其相邻的数增加,要修改堆中任意位置的元素较为困难,但删除堆顶元素较为简单(先取堆顶元素,修改后再放回堆中),故当要增加某个元素的值时,我们可以对该数进行标记,待该点成为堆顶时,出队修改后放回。

综上,当要删除一个最小值时,可以从堆顶取出一个元素

  • 若该点已经被删除了,则跳过。
  • 若该点需要增加,则取出,修改后放回堆中,并跳过。
  • 删除该点,并标记左右点。

AC_Code

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>using namespace std;typedef long long LL;const int N = 5e5 + 10;int n, m;
LL w[N];
int l[N], r[N];
bool st[N];
struct Node
{LL v;int p;bool operator< (const Node& t) const{if (v != t.v)return v > t.v;return p > t.p;}
};int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> m;for (int i = 1; i <= n; ++ i )cin >> w[i];for (int i = 1; i <= n; ++ i )l[i] = i - 1, r[i] = i + 1;l[1] = -1, r[n] = -1;priority_queue<Node> heap;for (int i = 1; i <= n; ++ i )heap.push({w[i], i});memset(w, 0, sizeof w);int cnt = 0;while (cnt < m){auto t = heap.top();heap.pop();auto v = t.v;auto p = t.p;if (st[p])continue;if (w[p]){heap.push({v + w[p], p});w[p] = 0;continue;}int lp = l[p], rp = r[p];if (~lp)w[lp] += v;if (~rp)w[rp] += v;st[p] = true;r[lp] = r[p];l[rp] = l[p];cnt ++;}while (heap.size()){auto t = heap.top();heap.pop();auto v = t.v;auto p = t.p;if (st[p])continue;w[p] += v;}for (int i = 1; i <= n; ++ i )if (!st[i])cout << w[i] << ' ';cout << endl;return 0;
}

【在线测评】

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

3112. 访问消失节点的最少时间 Medium

给你一个二维数组 edges 表示一个 n 个点的无向图&#xff0c;其中 edges[i] [ui, vi, lengthi] 表示节点 ui 和节点 vi 之间有一条需要 lengthi 单位时间通过的无向边。 同时给你一个数组 disappear &#xff0c;其中 disappear[i] 表示节点 i 从图中消失的时间点&#xff0…

【hadoop大数据集群 2】

【hadoop大数据集群 2】 文章目录 【hadoop大数据集群 2】1. 虚拟机克隆2. 时间同步3. 环境变量配置、启动集群、关闭集群 1. 虚拟机克隆 克隆之后一定要重新生成新虚拟机唯一的MAC地址和UUID等&#xff0c;确保新虚拟机与源虚拟机在网络拓扑中不发生冲突。 注意1.生成新的MA…

【C++】C++设计远程桌面软件的技术详解

在当今的数字化时代&#xff0c;远程桌面技术已成为企业远程办公、技术支持、教育培训等领域不可或缺的一部分。它允许用户从任何地点通过互联网安全地访问和控制远程计算机&#xff0c;就像直接坐在那台计算机前一样。C作为一种高效、灵活且性能强大的编程语言&#xff0c;非常…

C++ 继承详解:从基础到深入

继承是面向对象编程中最强大的功能之一&#xff0c;它不仅促进了代码的重用&#xff0c;还帮助我们构建复杂的系统。在C中&#xff0c;通过继承&#xff0c;我们可以创建一个新的类&#xff08;称为派生类&#xff09;来扩展现有类&#xff08;基类&#xff09;的功能。本文将全…

复学数据结构

1.for循环 c中的for循环和js的for循环用法一样 for (初始化表达式; 条件表达式; 递增/递减表达式) {// 循环体 } 2.数组 1&#xff09;时间复杂度 算法 平均情况 最坏情况 访问 O(1) O(1) 搜索 O(n) O(n) 插入 O(n) O(n) 删除 O(n) O(n) 2&#xff09;C 将高维维数组存…

10个常见的电缆载流表,值得收藏!

众所周知,电线电缆的载流是所有电工、电气人员都必须具备的基本储备,但是如果要将那么多的“数字”都记得清清楚楚,还是有一点困难的!今天咱们就做了一个电力电缆载流量对照表,速度收藏!下次参考不迷路! 1、0.6/1KV聚氯乙烯绝缘电力电缆载流量 以上电缆载流量计算条件:…

一个小问题导致,AI大模型集体翻车?

9.11大还是9.9大&#xff1f; 这两天大家都在说ChatGPT大模型翻车了 &#xff01; 这到底是怎么个事儿呢&#xff1f; 原来是最近有人想ChatGPT等大模型提了一个简单的问题&#xff1a; 9.11 大还是 9.9 大&#xff1f; 答案显而易见&#xff0c;然而众多大模型却给出了错误…

AI小白也能驾驭!10款免费工具让你秒变高手

市面上的AI工具种类繁多&#xff0c;覆盖了从创意设计到日常工作处理的各个领域。下面列出了10款实用的AI工具&#xff0c;它们能帮你在不同场景下提升效率&#xff0c;解决实际问题&#xff1a; Aicbo&#xff1a;这个在线生成工具可以根据你提供的描述生成图像&#xff0c;适…

鸿蒙开发error: failed to start ability

鸿蒙开发项目编译过后不能启动 项目在模拟器运行报&#xff1a; error: failed to start ability. Error while Launching ability 解决办法&#xff1a; 1&#xff0c;看了一些文章说是把module.json5配置文件中的"exported"由false改成true&#xff0c;没有解…

JavaScript基础 第五弹 学习笔记

一、什么是对象&#xff1f; 对象&#xff1a;JavaScript里的一种数据类型&#xff1b;可以理解为是一种无序的数据集合&#xff0c;但是数据是有序的数据集合。可以详细的描述某个事物 二、对象使用 1.对象声明语法 let 对象名 { } &#xff1b;let 对象名 new Object() le…

Kafka(四) Consumer消费者

一&#xff0c;基础知识 1&#xff0c;消费者与消费组 每个消费者都有对应的消费组&#xff0c;不同消费组之间互不影响。 Partition的消息只能被一个消费组中的一个消费者所消费&#xff0c; 但Partition也可能被再平衡分配给新的消费者。 一个Topic的不同Partition会根据分配…

阿里云DSW实例中安装并运行Neo4J

想尝试使用大模型对接Neo4J&#xff0c;在阿里云DSW实例中安装了Neo4J&#xff0c;却无法通过本地浏览器访问在DSW实例中运行的Neo4J。尝试了改neo4j.conf文件&#xff0c;以及添加专用网络的公共IP地址等方法&#xff0c;均没有成功。最后决定直接在服务器的命令行进行各种Cyp…

算法——双指针(day4)

15.三数之和 15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 这道题目说是三数之和&#xff0c;其实这和我们之前做过的两数之和是一个规律的~无非就是我们需要实时改动target的值。先排好序&#xff0c;然后固定一个数取其负值作target&#xf…

Django select_related()方法

select_related()的作用 select_related()是Django ORM&#xff08;对象关系映射&#xff09;中的一种查询优化方法&#xff0c;主要用于减少数据库查询次数&#xff0c;提高查询效率。当你在查询一个模型实例时&#xff0c;如果这个实例有ForeignKey关联到其他模型&#xff0…

Java文件管理

文件管理 Java中的对文件的管理&#xff0c;通过java.io包中的File类实现。Java中文件的管理&#xff0c;主要是针对文件或是目录路径名的管理&#xff0c;包括文件的属性信息&#xff0c;文件的检查&#xff0c;文件的删除等&#xff0c;但不包括文件的访问 file类 Java中的…

机器人开源调度系统OpenTcs6二开-车辆表定义

前面已经知道opentcs 需要车辆的模型结构数据&#xff0c;将里面的数据结构化&#xff0c;已表的形式生成&#xff0c;再找一个开源的基础框架项目对车辆进行增删改的管理 表结构&#xff1a; CREATE TABLE Vehicle (id INT AUTO_INCREMENT PRIMARY KEY COMMENT 唯一标识符,n…

GPT-4o全方位综合指南:功能解析、使用技巧与最佳实践

探索AI新时代&#xff1a;从GPT-4o特性到实用技巧&#xff0c;解锁高效AI助手的全部潜力 猫头虎是谁&#xff1f; 大家好&#xff0c;我是 猫头虎&#xff0c;别名猫头虎博主&#xff0c;擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决…

【功能】DOTween动画插件使用

一、下载安装DOTween插件&#xff0c;下载地址&#xff1a;DOTween - Asset Store (unity.com) 使用 Free免费版本即可&#xff0c;导入成功后&#xff0c;Project视图中会出现 DOTween 文件夹 二、使用案例 需求1&#xff1a;控制材质球中的某个属性值&#xff0c;实现美术需…

记录些MySQL题集(16)

MySQL 存储过程与触发器 一、初识MySQL的存储过程 Stored Procedure存储过程是数据库系统中一个十分重要的功能&#xff0c;使用存储过程可以大幅度缩短大SQL的响应时间&#xff0c;同时也可以提高数据库编程的灵活性。 存储过程是一组为了完成特定功能的SQL语句集合&#x…

node-red学习

Node-RED : 起步 1、安装nodejs Node.js — 在任何地方运行 JavaScript 验证 2、更换下载源 // 查看当前下载地址 npm config get registry // 设置淘宝镜像的地址 npm config set registry https://registry.npmmirror.com/ // 查看当前的下载地址 npm config get registry…