news 2026/4/16 12:07:19

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/4/13 12:56:01

【PHP容器数据持久化终极方案】:彻底解决容器重启数据丢失问题

第一章&#xff1a;PHP容器数据持久化的核心挑战在现代Web应用开发中&#xff0c;PHP常运行于容器化环境中&#xff0c;如Docker。尽管容器提供了环境一致性与快速部署能力&#xff0c;但其临时性本质给数据持久化带来了根本性挑战。当容器被销毁或重建时&#xff0c;内部文件系…

作者头像 李华
网站建设 2026/4/15 23:12:35

为什么你的PHP应用总被跨域攻击?深入剖析安全策略盲区

第一章&#xff1a;为什么你的PHP应用总被跨域攻击&#xff1f;深入剖析安全策略盲区许多PHP开发者在构建Web应用时忽视了跨域资源共享&#xff08;CORS&#xff09;的安全配置&#xff0c;导致应用频繁遭受跨站请求伪造&#xff08;CSRF&#xff09;和跨域数据窃取攻击。问题的…

作者头像 李华
网站建设 2026/4/16 11:55:32

语音合成与无人售货机联动:扫码购买后语音确认订单

语音合成与无人售货机联动&#xff1a;扫码购买后语音确认订单 在城市地铁站、写字楼大堂或校园角落&#xff0c;无人售货机早已不是新鲜事物。但你是否注意过——当扫码支付成功的那一刻&#xff0c;机器里传出的“滴”声或机械女声播报&#xff1a;“支付成功&#xff0c;可乐…

作者头像 李华
网站建设 2026/4/15 10:16:57

语音合成与Google镜像站点结合:绕过网络限制获取模型资源

语音合成与Google镜像站点结合&#xff1a;绕过网络限制获取模型资源 在AI驱动内容生成的浪潮中&#xff0c;语音合成技术正悄然改变人机交互的方式。无论是虚拟主播、有声读物&#xff0c;还是智能客服系统&#xff0c;高质量的TTS&#xff08;Text-to-Speech&#xff09;已成…

作者头像 李华
网站建设 2026/4/13 15:56:30

告别机械朗读!用GLM-TTS实现自然停顿与语调变化的秘诀

告别机械朗读&#xff01;用GLM-TTS实现自然停顿与语调变化的秘诀 在短视频配音、有声书制作甚至AI主播背后&#xff0c;你有没有注意过那些“像真人”的语音是怎么生成的&#xff1f;过去几年&#xff0c;我们常被TTS&#xff08;文本到语音&#xff09;系统那种一字一顿、毫无…

作者头像 李华
网站建设 2026/4/14 21:04:56

语音合成中的数字读法控制:金额、日期、电话号码播报规范

语音合成中的数字读法控制&#xff1a;金额、日期、电话号码播报规范 在银行客服自动播报一笔交易时&#xff0c;如果系统把“139-8877-6655”读成“一百三十九 八千八百七十七 六千六百五十五”&#xff0c;用户恐怕会立刻挂断电话。类似地&#xff0c;当导航提示“前方二零二…

作者头像 李华