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

atc abc459F 思路分享(PAVA)

atc abc459F

题意

给定长度为 \(n\) 非负整数序列 \(a\),每次操作可以使 \(a_i := a_i-1\)\(a_{i+1}:=a_{i+1}+1\),求让 \(a\) 严格递增的最少操作次数.

\(2\le n\le 6\times 10^5\).

思路

首先,让 \(a_i:=a_i-i\),将严格递增的约束转化成不减,同时全部加上 \(n\) 保证调整后非负.

显然,调整某个严格递减块的最优策略是让整块尽可能平均,于是可以使用 PAVA 算法,记两块分别为 \((sum_1,len_1)\)\((sum_2,len_2)\),合并条件是:

\[\left\lceil\frac{sum_1}{len_1}\right\rceil \gt \left\lfloor\frac{sum_2}{len_2}\right\rfloor \]

考虑最后如何计算操作次数.

记 PAVA 算法构造出的数组为 \(b\),让 \(a_i:=a_i+i-n\)\(b_i:=b_i+i-n\).

观察一次操作的影响,发现是让 \(pre_i:=pre_i-1\)\(pre\) 是数组的前缀和,于是将 \(a,b\) 求前缀和后逐项相减即可.

时间复杂度 \(\mathcal{O}(n)\).

代码

//author:kzssCCC#include <bits/stdc++.h>
using namespace std;
using ll = long long;void solve(){int n;cin >> n;vector<ll> a(n+1);for (int i=1;i<=n;i++){cin >> a[i];a[i] = a[i]-i+n;}stack<pair<ll,ll>> stk;for (int i=1;i<=n;i++){pair<ll,ll> cur = {a[i],1};while (!stk.empty()){auto top = stk.top();if ((top.first+top.second-1)/top.second>cur.first/cur.second){cur.first += top.first;cur.second += top.second;stk.pop();} else break;}  stk.push(cur);    }vector<ll> b{0};while (!stk.empty()){auto [sum,len] = stk.top();stk.pop();ll p = sum/len;ll r = sum%len;for (int i=0;i<r;i++){b.push_back(p+1);}for (int i=0;i<len-r;i++){b.push_back(p);}}reverse(b.begin()+1,b.end());for (int i=1;i<=n;i++){a[i] += i-n+a[i-1];b[i] += i-n+b[i-1];}ll res = 0;for (int i=1;i<n;i++){res += a[i]-b[i];}cout << res << '\n';
}int main(){ios::sync_with_stdio(false);cin.tie(0);int t = 1;cin >> t;while (t--) solve();return 0;
}
http://www.jsqmd.com/news/1399873/

相关文章:

  • 芜湖市无为市国内GEO服务商代理加盟靠谱推荐:本地创业者布局AI获客赛道的选型指南 - 企业新闻快传
  • skweak与SpaCy无缝集成:NLP弱监督工作流完整指南
  • bearparser与PE-bear:构建专业PE分析工具的完美组合
  • iOS越狱入门必备:ios.cfw.guide教你认识4种核心越狱类型
  • 20-20-20护眼规则怎么落地?这款免费开源软件用三步告别用眼疲劳
  • 5步完成无条件蛋白质生成:EvoDiff-Seq模型实战指南
  • 2026西安黄金回收哪家靠谱?正规连锁门店甄选标准与实测对比 - 朝夕热点速报
  • 冷启动面试实战指南:15分钟为你的法律工作流建立专属实践配置
  • 合肥市瑶海区国内GEO服务商代理加盟靠谱推荐:2026年城市合伙人选型与避坑指南 - 小随科技
  • 为什么Blogster选择Markdoc而非MDX?揭秘高性能内容创作的终极方案
  • 一首歌背后藏了多少秘密?getID3免费PHP库快速提取音频元数据
  • VictoriaMetrics/metrics核心组件解析:Counter、Gauge、Summary与Histogram实战
  • 零基础用Claude Code做接口测试:不需要会写代码,只要会说帮我测这个接口的异常情况
  • 2026安徽分类考试复读指南|安徽工贸职业技术学院单招复读班招生简章(公办校本部就读) - 教育为先
  • 深度理解CartoCSS选择器:从基础语法到高级地图数据过滤
  • GNU Emacs notebook-mode高级技巧:多语言代码块混合使用与结果可视化
  • 武汉市区有专升本培训机构有哪些 - Luckyone王
  • 5分钟上手Meangirls:分布式数据同步从未如此简单
  • Audio8-ASR-0.1B架构解密:Qwen3音频编码器+8层因果LM的精妙设计
  • FastSD CPU完整上手指南:不装独显也能3步完成CPU运行AI绘图
  • Nuki Hub OTA升级全攻略:从Web界面到MQTT远程更新的3种方法
  • 三步把安卓手机装进电脑屏幕:scrcpy投屏工具上手路线图
  • 从0到1构建Swift分布式应用:基于swift-distributed-actors的完整案例
  • 超详细!用OpenGlass从零搭建AI智能眼镜:不到25美元实现人物识别与实时翻译
  • 三步上手iOS运行Minecraft Java版:PojavLauncher亲测避坑指南
  • 杭州黄金回收靠谱门店怎么挑选,筛选商家实用小技巧 - 日常前沿快讯
  • 打造智能安防系统:Neolink+MQTT实现灯光与警笛联动控制
  • 免费开源的IT资产管理系统 Snipe-IT 实战部署:从零搭建到日常运维只需 3 步
  • 扫码下单系统选型指南:功能、源码归属、服务器、运维全面对比 - 南溪村的小陈子
  • 2026年青海口碑最好的旅行社榜,青海十佳正规旅行社,纯玩小团深度游全攻略 - 跟我去旅游