【题解 堆】 [蓝桥杯2023初赛] 整数删除

news2024/11/26 10:27:45

题目描述:

在这里插入图片描述


分析:

这道题一看就是一道堆的模板题
我们用堆记录当前的最小值以及当前值所在的下标
每次取出堆顶元素删除,而后将他的前一个以及后一个元素的值加上他的值就可以了
但是会有一个问题
你删除一个数之后,当前数左边和右边的两个数会加上当前这个数,你虽然把这两个数放到了堆里面,但是这个堆里面仍然存在着未加上被删数的这两个数。但是我们知道这两个数实际上已经不存在了,已经变成新的加上被删数的两个数了

怎么样可以跳过这两个原来的数呢?

我们可以对每一个位置记录一个时间戳
如果当前数被加上了新的数,那么加入堆之后就让这个位置的时间戳+1,最后取出堆顶元素的时候只需要比较当前堆顶元素的时间戳和当前位置的实际时间戳是否相同即可


#include<bits/stdc++.h>
using namespace std;

#define int long long 

typedef pair < int , pair < int , int >> pii;
#define mp make_pair
const int N = 5e5+100;
int Ne[N] , La[N];
int n,K;
int a[N];
bool vi[N];
bool iss[N];
int now[N];

priority_queue < pii , vector < pii > , greater < pii > > q;

signed main(){
	scanf("%lld %lld",&n,&K);
	for (int i = 1; i <= n; i++)
	  scanf("%d",&a[i]),vi[i] = 1;
	for (int i = 1; i <= n; i++)
	  now[i] = 0,Ne[i] = i+1 , La[i] = i-1;
	for (int i = 1; i <= n; i++)
	  q.push(mp(a[i],mp(i,0)));
	int cnt = 0;
	while (q.size()){
		if (cnt == K) break;
		while (q.top().second.second!=now[q.top().second.first]) q.pop();
		int x = q.top().second.first , v = q.top().first;
		q.pop();
		if (iss[x]) {continue;}
		iss[x] = 1;
		if (vi[La[x]]) a[La[x]]+=a[x] , q.push(mp(a[La[x]],mp(La[x],++now[La[x]])));
		if (vi[Ne[x]]) a[Ne[x]]+=a[x] , q.push(mp(a[Ne[x]],mp(Ne[x],++now[Ne[x]])));
		Ne[La[x]] = Ne[x]; La[Ne[x]] = La[x];
		cnt++;
	}
	int k = 1;
	while (iss[k]) k++;
	while (k!=n+1) cout<<a[k]<<' ' , k = Ne[k];
	return 0;
}

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

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

相关文章

电脑软件:推荐一款电脑多屏幕管理工具DisplayFusion

下载https://download.csdn.net/download/mo3408/88514558 一、软件简介 DisplayFusion是一款多屏幕管理工具&#xff0c;它可以让用户更轻松地管理连接到同一台计算机上的多个显示器。 二、软件功能 2.1 多个任务栏 通过在每个显示器上显示任务栏&#xff0c;让您的窗口管理更…

Leetcode—剑指OfferII LCR 044.在每个树行中找最大值【中等】

2023每日刷题&#xff08;二十三&#xff09; Leetcode—LCR 044.在每个树行中找最大值 DFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Note: The returned …

Go 面向对象,多态,基本数据类型

程序功能解读 第一行为可执行程序的包名&#xff0c;所有的Go源文件头部必须有一个包生命语句&#xff0c;Go通过包名来管理命名空间。 第三行import是引用外部包的说明 func关键字声明定义一个函数&#xff0c;如果是main则代表是Go程序入口函数 Go源码特征解读 源程序以.g…

【MySQL数据库】 五

本文主要介绍了如果根据表之间的关系设计表,以及mysql的聚合/分组/联合查询. 一.表的设计 实体和关系的四种关系 1.一对一 一个账号只能对应一个学生; 一个学生只能有一个账号; 比如:账号表和学生是一对一的关系 * 可以在账号表中引入学生id * 也可以在学生表中引入账号id…

能链智电,“重”症在身

文 | 智能相对论 作者 | 陈选滨 在过去的1-9月&#xff0c;充电基础设施增量为243.2万台&#xff0c;新能源汽车销量627.8万辆&#xff0c;充电桩与新能源汽车的增量比为1&#xff1a;2.6&#xff0c;距离工信部此前提出“2025年实现车桩比2:1&#xff0c;2030年实现车桩比1:…

自主SSL品牌—JoySSL

JoySSL是一家为数不多的中国自主品牌SSL证书服务厂商&#xff0c;是自研推出的新一代https数字证书。 它不仅有着自己品牌JoySSL&#xff0c;还拥有着国内外绝大数主流证书品牌&#xff0c;遍寻诚意伙伴&#xff0c;单域名证书都是不限年限、不限证书张数不限量提供。 目前了…

C语言——计算n的阶乘

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i;int n 0;int s1;scanf("%d",&n);for(i1; i<n; i){s*i;}printf("s%d\n",s);return 0; }

HP电脑主机清除BIOS密码

HP电脑主机清除BIOS密码 重装系统肯定不能清除BIOS密码的。 拔掉电池一般也只能是将BIOS设定恢复出厂。 台式机需要清除BIOS密码&#xff0c;一般是主机板上会有对应的跳线&#xff0c; 关机&#xff0c;记住跳线的预设位置&#xff0c;拔掉跳线&#xff0c;重新开机&#x…

于道 - 前端项目启动步骤参考

1. 安装 启动过程有9个步骤&#xff1a; 1.1 安装 Node JS , V18版本的 &#xff08;安装步骤省略&#xff09; 1.2 安装 npm install -g yarn &#xff0c;node JS里边好像自带npm &#xff0c;通过npm的命令安装 yarn 1.3 切换到项目中去安装&#xff0c;npm install &a…

C++初阶 | [二] 类和对象(上)

摘要&#xff1a;class&#xff0c;成员函数&#xff0c;成员变量&#xff0c;类的大小&#xff0c;this 指针 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象…

吃啥大转盘

经常跟朋友出去吃饭&#xff0c;选择太困难了所以写了个简单的转盘&#xff0c;直接copy到txt文本然后把文件后缀改成html即可。 需要换食物直接在文件中找到 list 值按照格式替换一下即可。 效果&#xff1a; 代码块&#xff1a; <html><head><meta http-…

软件测试简历原来是写了这些才让面试官已读不回

前言&#xff1a; 马上就到了面试跳槽涨薪好时候了&#xff0c;最近看很多的小伙伴已经开始投简历了&#xff0c;一天投了几十次几百次&#xff0c;面试官已读不会&#xff0c;面试的机会都没有更别说后面的事情的&#xff0c;这是为什么呢&#xff1f; 很大一部分的原因是的…

内网穿透工具之花生壳(二)

目录 开始教程 第一步&#xff1a;进入管理官网&#xff0c;注册并登录账号 第二步&#xff1a;进入 管理页面 第三步&#xff1a;添加映射表&#xff0c;然后填写一下基本内容 总结&#xff1a;emmm,反正都很快上手&#xff0c;但是这个就免费1G流量,这个免费的还是https…

开发知识点-NodeJs-npm/Pnpm/Vite/Yarn包管理器

包管理器 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序npm 全局变量pnpmPnpm介绍ViteYarn ‘vue-cli-service’ 不是内部或外部命令&#xff0c;也不是可运行的程序 yarn yarn add vue-amap yarn add vue-amap ant-design-vue npm 全局变量 换主机 新…

掌动智能:云可观测性的主要特点及应用场景

云全景可观测性安全平台是一个跨架构、跨平台的可观测性方案&#xff0c;实现对云环境下的细粒度数据可视化&#xff0c;满足安全部门对云内部安全领域的多场景诉求&#xff0c;包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能…

vue:如何实现通过判断数组中每个对象的其中一个属性,从而更改另一个属性的值

1、假设一个box为一个包含多个对象的数组&#xff0c;这个box数组可以在方法中定义也可以在data域中定义 let box [{ id: 1, status: 审批中 },{ id: 2, status: 已通过 },{ id: 3, status: 未通过 } ];2、在methods域中写一个方法遍历这个box数组判断每个对象中的status属性是…

【原创】java+swing+mysql校园零食商城设计与实现

摘要&#xff1a; 本文探讨了一个校园零食商城的设计与实现&#xff0c;校园零食商城的设计与实现旨在为学生提供一个方便、快捷的在线购买零食的环境&#xff0c;同时提高商家的销售效率和客户满意度。通过不断优化和完善系统&#xff0c;相信可以为校园内的学生和商家带来更…

接口自动化面试题

1.http请求都包含哪些内容&#xff0c;请求头和请求体有哪些内容 请求行/请求头/请求体/空行 请求行&#xff1a;请求方法字段、URL字段、http协议版本 例如&#xff1a;GET /index.html HTTP/1.1 请求方法&#xff1a;GET、POST、PUT、DELETE、OPTIONS、TRACE、CO…

【PG】PostgreSQL13主从流复制部署(详细可用)

目录 版本 部署主从注意点 1 主库上创建复制用户 2 主库上修改pg_hba.conf文件 3 修改文件后重新加载配置使其生效 4 主库上修改配置文件 5 重启主库pg使参数生效 6 部署从库 7 备份主库数据至从库 停止从库 备份从库的数据库目录 新建数据库数据目录data 创建和…

干货 | 接口自动化测试分层设计与实践总结

接口测试三要素&#xff1a; 参数构造 发起请求&#xff0c;获取响应 校验结果 一、原始状态 当我们的用例没有进行分层设计的时候&#xff0c;只能算是一个“苗条式”的脚本。以一个后台创建商品活动的场景为例&#xff0c;大概流程是这样的(默认已经是登录状态下)&#…