当前位置: 首页 > news >正文

优先队列,链表优化

8.整数删除 - 蓝桥云课

#include<bits/stdc++.h> 
#define int long long
using namespace std;
typedef pair<int,int>p;
const int A=5e5+10;
int s[A];
int l[A];
int r[A];
signed main()
{// 请在此输入您的代码priority_queue<p,vector<p>,greater<p>>q;int N,K;cin>>N>>K;for(int i=1;i<=N;i++){cin>>s[i];q.push({s[i],i});l[i]=i-1;r[i]=i+1;if(r[i]==N+1){r[i]=-1;}}while(K){p t=q.top();q.pop();if(t.first!=s[t.second]){q.push({s[t.second],t.second});continue;}K--;if(l[t.second]>=1){s[l[t.second]]+=t.first;}if(r[t.second]>=1){s[r[t.second]]+=t.first;}if(l[t.second]>=1){r[l[t.second]]=r[t.second];}if(r[t.second]>=1){l[r[t.second]]=l[t.second];}s[t.second]=-1;}for(int i=1;i<=N;i++){if(s[i]!=-1){cout<<s[i]<<" ";}}return 0;
}

为了找到每一次更新数组后的最小值,所以想到使用小顶堆来实现,小顶堆的定义:

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

为了确定每一个数值的位置信息,从而更方便的用链表来维护这个数组,所以小顶堆是pair类型的,定义l,r数组来存储每个节点的左右坐标值,同时将超过数组范围的右节点定义为-1,方便后面的维护。

操作逻辑:循环操作次数,但这里不能简单的进行K--,因为如果取出的堆顶元素不等于堆顶元素下标值所对应的原数组元素,这是因为每一次操作时,数组中的元素的值会发生变化,所以变化后的元素值和下标需要push进堆中重新维护,这次操作不计入操作次数,所以操作次数是否减少要进行这个判断。
 

    p t=q.top();q.pop();if(t.first!=s[t.second]){q.push({s[t.second],t.second});continue;}K--;

在进行完上面的判断后,要开始对数组进行更改:

    if(l[t.second]>=1){s[l[t.second]]+=t.first;}if(r[t.second]>=1){s[r[t.second]]+=t.first;}if(l[t.second]>=1){r[l[t.second]]=r[t.second];}if(r[t.second]>=1){l[r[t.second]]=l[t.second];}s[t.second]=-1;}

对值更改:如果节点的左右节点没有越界,节点值加上堆顶值。

对下标的更改:当前节点的左节点的右节点等于当前节点的右节点,当前节点的右节点的左节点等于当前节点的左节点(删节点通用)。

http://www.dtcms.com/a/322777.html

相关文章:

  • 2025-08-09通过授权码的方式给exe程序充值
  • 如何搭建ELK
  • C# DataGridView 添加进度条
  • 五、RuoYi-Cloud-Plus 前端项目部署以及如何改后端请求地址。
  • 《从零实现哈希表:详解设计、冲突解决与优化》
  • 09 【C++ 初阶】C/C++内存管理
  • 容器技术基础与实践:从镜像管理到自动运行配置全攻略
  • 【机器学习深度学习】模型选型:如何根据模型的参数算出合适的设备匹配?
  • Java 字符流与字节流详解
  • bms部分
  • 系统调用性能剖析在云服务器应用优化中的火焰图生成方法
  • 比亚迪第五代DM技术:AI能耗管理的深度解析与实测验证
  • Klipper-G3圆弧路径算法
  • Android MediaCodec 音视频编解码技术详解
  • 排序概念以及插入排序
  • Docker部署whisper转写模型
  • AI鉴伪技术:守护数字时代的真实性防线
  • 软件工程总体设计:从抽象到具体的系统构建之道
  • Python爬虫实战:研究PSpider框架,构建电商数据采集和分析系统
  • (LeetCode 每日一题) 231. 2 的幂 (位运算)
  • Python NumPy入门指南:数据处理科学计算的瑞士军刀
  • Redis缓存详解:内存淘汰和缓存的预热、击穿、雪崩、穿透的原理与策略
  • 深入理解C++多态:从概念到实现
  • AudioLLM
  • 人工智能-python-特征选择-皮尔逊相关系数
  • 第15届蓝桥杯Scratch选拔赛初级及中级(STEMA)2023年12月17日真题
  • Python爬虫实战:构建国际营养数据采集系统
  • 非常简单!从零学习如何免费制作一个lofi视频
  • 【GitHub小娱乐】GitHub个人主页ProFile美化
  • 怎么选择和怎么填写域名解析到 阿里云ECS