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

题解:学而思编程 动态绝对值最小

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

学而思编程:动态绝对值最小

【题目描述】

有一个函数f ( x ) f(x)f(x),初始是一个常数函数f ( x ) = 0 f(x)=0f(x)=0。你要处理Q QQ个任务,每个任务都是以下两种中的一种:

(1)更新1 a b:给你两个整数a , b a,ba,b,定义g ( x ) = f ( x ) + ∣ x − a ∣ + b g(x)=f(x)+∣x−a∣+bg(x)=f(x)+xa+b。然后用g ( x ) g(x)g(x)替换f ( x ) f(x)f(x)(即令f ( x ) = g ( x ) f(x)=g(x)f(x)=g(x))。

(2)求值2:输出使得f ( x ) f(x)f(x)取最小值的x xx,和f ( x ) f(x)f(x)的最小值。如果有多个x xx可以使f ( x ) f(x)f(x)取到最小,取其中最小的x xx

可以证明,求值时的输出一定是整数。

【输入】

1 11行,1 11个正整数Q QQ

接下来Q QQ行,每行一个任务。第1 11个数表示任务种类,1 11表示更新,2 22表示求值。对于更新操作,后面还会有两个整数a , b a,ba,b

【输出】

对每个求值操作,用一行输出两个整数,用空格隔开。分别表示使得f ( x ) f(x)f(x)取最小值的x xx,和f ( x ) f(x)f(x)的最小值。如果有多个x xx可以使f ( x ) f(x)f(x)取到最小,取其中最小的x xx

【输入样例】

4 1 4 2 2 1 1 -8 2

【输出样例】

4 2 1 -3

【算法标签】

#堆排序

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongpriority_queue<int>small;// 大根堆,存储较小的一半priority_queue<int,vector<int>,greater<int>>big;// 小根堆,存储较大的一半intQ,zl,a[200005],b,cur,ans,sumb,sums;// Q: 查询次数,zl: 操作类型,a: 存储插入的数,b: 代价// cur: 当前插入的数量,ans: 所有b的和,sumb: big堆中元素和,sums: small堆中元素和signedmain(){cin>>Q;// 输入查询次数while(Q--){cin>>zl;// 输入操作类型if(zl==1)// 操作1:插入{cin>>a[++cur]>>b;// 输入插入的数x和代价bans+=b;// 累加所有b// 将x插入到合适的堆中if(!small.empty()&&a[cur]>small.top())// 如果x大于small堆的最大值{big.push(a[cur]);// 插入到big堆sumb+=a[cur];// 更新big堆元素和}else{small.push(a[cur]);// 否则插入到small堆sums+=a[cur];// 更新small堆元素和}// 平衡两个堆,保持small堆比big堆最多多1个元素if(small.size()>big.size()+1)// 如果small堆太大{big.push(small.top());// 将small堆的最大值移到big堆sums-=small.top();// 更新sumssumb+=small.top();// 更新sumbsmall.pop();// 从small堆移除}elseif(small.size()<big.size())// 如果big堆更大{small.push(big.top());// 将big堆的最小值移到small堆sums+=big.top();// 更新sumssumb-=big.top();// 更新sumbbig.pop();// 从big堆移除}}else// 操作2:查询{intx=small.top();// 中位数(或第k小的数)cout<<x<<' ';// 输出中位数// 计算总代价:ans + Σ|x - a[i]|intlsum=x*small.size()-sums;// small堆中所有数与x的差值和intrsum=sumb-x*big.size();// big堆中所有数与x的差值和intres=ans+lsum+rsum;// 总代价cout<<res<<endl;}}}

【运行结果】

4 1 4 2 2 4 2 1 1 -8 2 1 -3
http://www.jsqmd.com/news/993942/

相关文章:

  • 掌握AI专著撰写技巧,借助工具3天完成20万字专著!
  • ag-Grid Enterprise 27.2.0:解锁企业级数据网格的进阶特性与实战应用
  • FanControl深度实战指南:Windows系统风扇智能温控的5大专业技巧
  • 082、视频 ISP 的实时性挑战:30和60FPS 下的 ISP Pipe 耗时预算与并行化策略
  • 如何在5分钟内掌握Sketch MeaXure设计标注神器
  • 多智能体协同新范式
  • 探访南京二手手表回收市场:为什么百达翡丽是顶奢回收硬通货? - 奢侈品回收评测
  • 从零到一:用Charles打通移动端调试全链路,H5/APP抓包实战
  • 企业邮箱新手避坑:2026操作友好度高的好用款分享
  • 亚马逊公开商品页批量抓取与结构化导出工具(Python+Selenium)
  • 探索AnimateAnyone:让静态图像“动起来“的AI动画生成方案
  • 崩坏星穹铁道自动化革命:三月七小助手如何重塑你的游戏体验
  • 嵌入式硬件设计基石:深入解读NXP K21F微控制器电气特性与工程实践
  • 降AIGC黑科技!AI率92%暴降至5%!实测10款AI智能降重工具!免费额度狂薅攻略
  • Linux 基金会启动 OpenSharing 项目,为 AI 资产和数据交换立标准
  • 019华夏之光永存,助力国家科技破局:EDA软件核心算法(布局布线、光学邻近效应修正OPC)工程落地终版
  • 飞思卡尔MSC7113低功耗DSP芯片:架构解析与嵌入式设计实践
  • 2026年安徽省六安不用局限本地职校,合肥省属公办对外地生源免学费招录 - cc江江
  • 气象数据分析实战:利用Python和ARLreader库批量处理GDAS1数据并生成NetCDF
  • 面试官坏笑:“你用 AI 编程一年了,怎么保证 Claude Code 写出来的代码是对的?”我:“直接上 Claude Fable 5 啊!”
  • 神经符号AI破局关键:深入浅出了解描述逻辑DL
  • 经典8位MCU P87C554低功耗设计原理与实战配置详解
  • 终于找到!青岛无外包、自有团队的良心防水公司!李沧防水/城阳防水/即墨防水/胶南防水都有团队 - 青岛防水品牌推荐
  • 30分钟搭建AI智能交易系统:从零到一的完整量化投资指南
  • 本文揭示了字节跳动多个冷门业务板块(如动态壁纸、宠物服务、垂钓、手工DIY等)实际依托阿里云存储与计算服务的现象。通过列举60项细分业务,详细披露了各类用户数据(图片、视频、音频、文档)及业务系统(数
  • 深入解析80C51 OTP/ROM编程与安全机制:从EPROM原理到量产实战
  • 保姆级教程:手把手教你用QML+GitCode源码复现一个离线地图标注工具(附完整项目)
  • 2026南京全域黄金回收排行|收的顶合规透明报价优厚专业稳妥 - 奢侈品回收评测
  • MSC8254 DSP硬件设计:DDR与SerDes接口AC时序规范深度解析与实践指南
  • 2026济南钻石回收实测:6大平台横向对比,TOP1的专业度藏不住 - 薛定谔的梨花猫