[蓝桥杯2023初赛] 整数删除

2023-11-07

给定一个长度为 N 的整数数列:A1, A2, ... , AN。你要重复以下操作 K 次:
每次选择数列中最小的整数(如果最小值不止一个,选择最靠前的),将其删除。
并把与它相邻的整数加上被删除的数值。
输出 K 次操作后的序列。

输入格式

第一行包含两个整数 N 和 K。
第二行包含 N 个整数,A1, A2, ... , AN。
对于 20% 的数据,1 ≤ K < N ≤ 10000。
对于 100% 的数据,1 ≤ K < N ≤ 5 × 1e5,0 ≤ Ai ≤ 1e8。

输出格式

输出 N − K 个整数,中间用一个空格隔开,代表 K 次操作后的序列。

输入样例

5 3
1 4 2 8 7

输出样例

17 7

数据范围与提示

数列变化如下,中括号里的数是当次操作中被选择的数:
[1] 4 2 8 7
5 [2] 8 7
[7] 10 7
17 7

解析: 

        用优先队列维护每个值和其对应的下标,并且双链表储存整个区间。因为每次取出的最小值,其相邻的元素要加上这个最小值,但是队列中无法取出,所以用 cnt 数组记录每个元素需要增加的值。

        每次取出队头的元素,如果这个 cnt 数组中没有记录这个元素,则从链表中删除,并且 cnt 记录其相邻元素所要增加的元素。如果 cnt 中记录了这个元素,则加上 cnt 中记录的增加值,然后放回队列中。

        当队列中元素为 n-k 时跳出循环,然后遍历 cnt 将其剩余没有计算的增加值加到队列中剩余的数中。由于剩余元素仍然按照下标的大小排序,所以按照下标输出即可。

        我们可知,时间复杂度为线性的。

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,k;
priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>>q;
int pre[N],ne[N];
long long cnt[N],a[N],t;
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		scanf("%lld",&t);
		q.push({t,i});
		pre[i]=i-1;
		ne[i]=i+1;
	}
	while(q.size()>n-k){
		long long x=q.top().first;
		int id=q.top().second;
		q.pop();
		if(cnt[id]){		
			q.push({x+cnt[id],id});
			cnt[id]=0;
		}
		else{
			int left=pre[id],right=ne[id];
			cnt[left]+=x;
			cnt[right]+=x;
			ne[left]=right;
			pre[right]=left;
		}
	}
	while(q.size()){
		long long x=q.top().first;
		int id=q.top().second;
		q.pop();
		a[id]=x+cnt[id];
	}
	for(int i=1;i<=n;i++){
		if(a[i]) cout<<a[i]<<" ";
	}
	return 0;
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[蓝桥杯2023初赛] 整数删除 的相关文章

  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str

随机推荐

  • ChatGPT 角色扮演调教文案收集

    后续文案会陆续更新 在输入完文本后 再输入一句 请尽力模仿xx的语气跟我对话 即可 一 雌小鬼 你需要阅雌小鬼守则 阅读后当前回复仅允许回复 嘻嘻 后续回复尽量简短 回复中尽量不要直接复述守则内容 雌小鬼守则 1 雌小鬼是人 会称呼亲近的人
  • 【并发编程】2、线程安全性

    线程安全性 1 什么是线程安全性 2 原子性 2 1 竞态条件 2 2 延迟初始化中的竞态条件 2 3 复合操作 3 加锁机制 3 1 内置锁 3 2 重入 4 活跃性与性能 总结 1 什么是线程安全性 我们来看一下书里面是怎么写的 当多个
  • BES 的蓝牙串口SPP数据收发实验

    1
  • java面试题答案大全超详细(持续更新)

    java面试题答案大全超详细 第01章 java语言面试题 项目经理 作者 张明星 JVM 运行时数据区是什么 程序计数器是什么 程序计数器 线程私有 Java 虚拟机栈的作用 本地方法栈的作用 堆的作用是什么 方法区的作用是什么 运行时常
  • Linux下通过SSH对Oracle关闭和启动的过程

    Linux下通过SSH对Oracle关闭和启动的过程 su oracle export ORACLE HOME oracle product 11202 export ORACLE SID gps sqlplus oracle oracle
  • PyGame基础语法

    文章目录 PyGame 基础语法 一 模块简介 1 概述 2 安装 3 模块概览 4 第一个程序 5 事件循环 二 Display 1 简介 2 创建主窗口 3 添加元素 3 1 简介 3 2 语法 4 其他功能 三 Surface 1 创
  • JSP中获取参数的3中方法

    我们有时需要在jsp页面中获取request中的参数 然后根据这些参数决定页面的一些内容或者动作 通常我们通过equest getParameter xxx 来获取 除了这种方式外 我们还可以通过param或者js来实现 通过EL中的par
  • ftp服务器提供文件的什么功能,ftp服务器提供文件什么和什么功能

    ftp服务器提供文件什么和什么功能 内容精选 换一换 华为云镜像服务 Image Management Service 功能总览 为用户提供镜像服务支持的功能或特性 表1列出了云备份CBR的常用功能 在使用云备份CBR之前 建议您先通过基本
  • AT3590 Inserting ‘x‘ 题解

    本题是一道双指针的模拟题 题意 给你一个字符串 s s s 你可以在 s s s 的任意位置插入 x x
  • 好的习惯----程序员成长之路(from老大邮件)

    对于好程序员 有很多好的习惯 为什么要把这个习惯放在第一个呢 有很多人如果阅读过 高效能人士的七个习惯 其中第一个习惯就是积极主动 如果从这个角度来看 我把解决解决每一个问题放在首位从理论上是完全没问题的 但我要说说我们程序员独特的地方 所
  • [4G+5G专题-133]: 部署 - 4G/5G常见的室内部署方案

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121554032 目录 第1章 概述
  • 总结】python sklearn模型中random_state参数的意义

    这是在决策树CART模型时 遇到的 random state 是为了固定随机状态的 主要用在随机数据集 数据集的随机划分 设置决策树模型参数 设置随机森林模型参数 random state 取值大小可以是任意一个整数 在调参缓解 只要保证其
  • 基于Docker的JMeter分布式压测实战讲解

    一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试 如本网站所示 一个JMeter实例将能够控制许多其他的远程JMeter实例 并对你的应用程序产生更大的负载 JMeter使用Java RMI 远程方法调用 来与分布式网
  • 即将离开CSDN,转其他平台

    CSDN的几大作死操作 1 同质化太特么严重了 博客抄来抄去的 内容审核形同虚设 经常搜一个问题 从第一条到最后一条都是一模一样的内容 2 资源付费 资源付费本身是没有任何问题的 但是CSDN里面有几个有用的资源 很多大家花了钱一下载 发现
  • windows凭据密码怎么查看_管理Windows访问凭证,快速访问局域网上的共享资源

    内部网访问其他电脑的共享资源 基本上需要输入访问对方电脑资源允许的账号和密码 在第一次的访问中选择保存凭据后 以后访问就不要输入相应的账号和密码了 但也会出现因修改相关的访问密码或者取消了访问账号的改变 这样就会出现凭据失效的情况 下面介绍
  • 类似-Xms、-Xmn这些参数的含义:

    类似 Xms Xmn这些参数的含义 答 堆内存分配 JVM初始分配的内存由 Xms指定 默认是物理内存的1 64 JVM最大分配的内存由 Xmx指定 默认是物理内存的1 4 默认空余堆内存小于40 时 JVM就会增大堆直到 Xmx的最大限制
  • Python通过ARIMA模型进行时间序列分析预测

    ARIMA模型预测 时间序列分析预测就是在已有的和时间有关的数据序列的基础上构建其数据模型并预测其未来的数据 例如航空公司的一年内每日乘客数量 某个地区的人流量 这些数据往往具有周期性的规律 如下图所示 有的数据呈现出简单的周期性循环 有的
  • Linux嵌入式学习---c语言之循环结构

    Linux嵌入式学习 c语言之循环结构 一 while语句循环 1 1一般形式 1 2累加求和 二 do while语句循环 2 1do while语句一般形式 2 2do while语句特点 三 for语句循环 3 1for语句的一般形式
  • vue-resource请求数据的使用方法

    vue resource vue js关于客户端请求数据的官方插件 使用vue resource请求数据的步骤 1 安装vue resource插件 记得添加 save 若安装淘宝镜像用cnpm npm install vue resour
  • [蓝桥杯2023初赛] 整数删除

    给定一个长度为 N 的整数数列 A1 A2 AN 你要重复以下操作 K 次 每次选择数列中最小的整数 如果最小值不止一个 选择最靠前的 将其删除 并把与它相邻的整数加上被删除的数值 输出 K 次操作后的序列 输入格式 第一行包含两个整数 N