news 2026/6/27 7:35:38

abc439_f F - Beautiful Kadomatsu dp+FIT

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
abc439_f F - Beautiful Kadomatsu dp+FIT

动态规划难题

题目链接:https://atcoder.jp/contests/abc439/tasks/abc439_f

题意:

思路:下面含义相同,ac代码用树状数组实现前缀和快速查询

通过观察得出的一个结论,由于给出的是排列(permutation 指一个长度为 n 的数组,包含 1 到 n,每个数恰好出现一次。)所以发现每个数字都不一样,每对数构成的几何关系么就是上升要么就是下降,题目中要我们找合法的子序列,也就是从原序列中随机抽出一些数字按原来的顺序排列的出的子序列满足“山谷”数量小于“山峰”数量,山谷山峰就是题目中的y和x的含义,枚举各种情况的子序列x1 x2 x3 x4 ...... xn-1 xn得出在一开始的两个数满足<和最后两个数满足>的子序列就是满足题意的,现在考虑位置 i 上的数作为子序列中的,对于我们只需要找比小的就行,所以统计L[i]表示在i之前小于P[i]的个数,由于是排列,所以R[i]=P[i]-1-L[i]表示在位置i之后小于P[i]的个数,在考虑之前的序列的结构情况,要么是一个比小的数,也就是L[i]个数都满足情况,还有就是存在两个数满足并且i < j < i,还有存在其它多位数的情况构成的序列结构满足最终的子序列是满足题意的,我们先考虑位置 i 前面仅有一个和两个元素的情况,对于三个和四个元素的情况可以由一个和两个的情况继承而来。我们可以用变量pre表示位置i 前有多少个序列(大于1个元素构成的前半部分序列)满足使得最终选出的子序列满足题意,那么对于每个位置上的能选出的合法的子序列的个数就是 ( pre+ L[i] ) * R[i],然后再更新 pre = pre*2 + L [ i ] ;

pre* 2是在做什么?

假设在处理之前,我们已经有了 3 个半成品序列:,,

现在遇到了,对于这每一个半成品,我们都有两种选择:

  • 不把放入序列,,依然是合格的半成品,数量为 pre。

  • 放入序列:由于中间部分没有大小限制,放入后,它们变成了更长的半成品*,*,*,数量也是pre。

所以,原本的pre就变成了 pre* 2。这本质上是在计算子集的数量(每个元素选或不选)。

+ L[i]是在做什么?

除了继承和扩展旧的半成品,我们还会在当前位置新产生一批半成品。

  • 代表在 i 左边有多少个比小的数。

  • 每一个比小的数,j < i , 都可以和组成一对新的“开头”:S*。

  • 由于<,这正好满足了“开头必须上升”的条件。

所以,我们要把这 L[i] 对新生产出来的“长度为 2 的半成品”加入到pre中。

AC代码:

void solve() { ll n;cin>>n; vector<ll>a(n+1),bit(n+1,0),l(n+1,0); auto up=[&](ll id) { while (id<=n)bit[id]++,id+=lowbit(id); }; auto sum=[&](ll id) { ll res=0; while (id)res+=bit[id],id-=lowbit(id); return res; }; ll pre=0,ans=0; rep(i,1,n) { cin>>a[i];l[i]=sum(a[i]);up(a[i]); ll r=a[i]-1-l[i]; ans=add(ans,mul(add(pre,l[i]),r)); pre=add(mul(pre,2),l[i]); } cout<<ans<<endl; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 18:37:45

GLM-TTS能否接入MyBatisPlus后台管理系统实现日志播报?

GLM-TTS能否接入MyBatisPlus后台管理系统实现日志播报&#xff1f; 在现代企业级系统运维中&#xff0c;一个常见的痛点是&#xff1a;日志写得再详细&#xff0c;没人看就等于没发生。尤其是在高并发、多人员协作的环境下&#xff0c;关键告警信息很容易被淹没在成千上万条记…

作者头像 李华
网站建设 2026/6/16 2:40:47

语音合成与huggingface镜像网站结合:加速大模型权重下载

语音合成与Hugging Face镜像网站结合&#xff1a;加速大模型权重下载 在智能语音应用快速落地的今天&#xff0c;开发者常常面临一个看似简单却极其耗时的问题&#xff1a;如何高效地将一个动辄数GB的语音合成模型从云端拉到本地&#xff1f;尤其是在国内网络环境下&#xff0…

作者头像 李华
网站建设 2026/6/9 19:50:04

语音合成在智能家居中的应用:基于GLM-TTS的本地化语音提醒

语音合成在智能家居中的应用&#xff1a;基于GLM-TTS的本地化语音提醒 在现代家庭中&#xff0c;智能音箱每天清晨用机械的声音播报天气&#xff1a;“今天气温26度&#xff0c;晴。”听起来高效&#xff0c;却总少了点人情味。如果这个声音换成你母亲温柔的叮嘱——“宝贝&…

作者头像 李华
网站建设 2026/6/24 7:40:05

GLM-TTS能否用于会议纪要转语音?提升信息传达效率

GLM-TTS能否用于会议纪要转语音&#xff1f;提升信息传达效率 在远程协作日益频繁的今天&#xff0c;企业会议数量激增&#xff0c;而会后整理出的纪要却常常“沉睡”在邮箱或文档系统中。员工不愿读、没空看&#xff0c;导致关键决策和任务分配被遗漏——这几乎是每个团队都面…

作者头像 李华
网站建设 2026/6/6 3:39:26

语音合成中的节奏控制:如何调节语速快慢而不失真?

语音合成中的节奏控制&#xff1a;如何调节语速快慢而不失真&#xff1f; 在智能语音助手、有声书平台和虚拟主播日益普及的今天&#xff0c;用户早已不再满足于“能说话”的机器声音。他们期待的是自然流畅、富有情感、节奏得体的语音输出——尤其是当需要加速播放长篇内容&am…

作者头像 李华
网站建设 2026/6/24 9:05:15

【限时干货】PHP视频加密播放系统设计:防止抓包、破解与非法传播

第一章&#xff1a;PHP视频加密播放系统概述在现代Web应用开发中&#xff0c;视频内容的版权保护成为关键需求之一。PHP视频加密播放系统通过结合服务端加密技术与前端解密播放机制&#xff0c;实现对敏感视频资源的安全分发。该系统不仅防止用户直接下载原始视频文件&#xff…

作者头像 李华