首页 > 其他分享 >YC311A [ 20240701 CQYC省选模拟赛 T1 ] 好串(good)

YC311A [ 20240701 CQYC省选模拟赛 T1 ] 好串(good)

时间:2024-07-08 20:11:33浏览次数:13  
标签:20240701 good YC311A 前缀 max sum 个数 第一遍 数组

题意

给定一个长度为 \(n\) 的 \(01\) 串。

定义一个串是好的当且仅当该串的所有前缀以及所有后缀的 \(1\) 的数量大于等于 \(0\) 的数量。

你需要维护 \(q\) 个查询,每次求 \(S_{l, ..., r}\) 的子串最少添加的 \(1\) 的个数使得该子串是好的。

Sol

首先不难发现一个正确的贪心,也就是对于前缀跑一遍,尽量把 \(1\) 的位置往后放,然后再倒着跑一遍,此时需要添加的位置显然是最优的。

想办法用一些数据结构去维护这个过程。

先形式化这个东西,设 \(0\) 为 \(-1\),\(1\) 为 \(+1\),我们设前缀和数组为 \(sum_i\) 对于第一遍操作后的数组 \(sum'\),当前前缀放置的 \(1\) 个数显然有 \(sum'_i = \max_{j = 1} ^ i -sum_i\)。

第一遍操作的贡献即为 \(max_{i = 1} ^ n (-sum_i)\)。

考虑第二遍操作所带来的贡献,还是考虑 \(sum'\) 数组的折线图,若有 \(sum'_i > sum_n\) 意味着什么?也就是对于区间 \(i + 1 \to n\) 的 \(0\) 的个数大于 \(1\) 的个数。

所以,第二遍操作的贡献为 \(\max_{i = 1} sum'_i - sum_n\)。

将 \(sum'_i\) 的式子带入,\(sum_n\) 不变可以提出来。

最后加上第一遍的贡献。

\[\max_{i = 1} ^ n {sum_i + \max_{j = 1} ^ i (-sum_j)} - sum_n + \max_{i = 1} ^ n {(sum_i)} + \max_{i = 1} ^ n {(-sum_i)} \]

欸我们发现最后这两个东西加起来等于零,直接暴力消掉。

于是最后式子就变成了: \(\max \{sum_i - sum_j, j \le i\} - sum_n\)。

如何支持多组询问?中间 \(sum_i - sum_j\) 会直接减掉 \(sum_{l - 1}\),直接把 \(sum_n\) 改成 \(sum_r - sum_{l - 1}\) 即可。

最后这个东西可以用线段树维护,或者使用并查集离线维护。

复杂度:\(O(n \log n)\)。

标签:20240701,good,YC311A,前缀,max,sum,个数,第一遍,数组
From: https://www.cnblogs.com/cxqghzj/p/18290624

相关文章

  • vk-data-goods-sku-popup uniapp vue3示例
    效果图组件简介vk-data-goods-sku-popup是一个uniapp上面方便好用的sku组件,使用场景包括但不限于商品详情页、购物车页面、订单结算页、搜索结果页下面就上代码了,完整vue页面的代码如下<scriptsetup>import{ref,defineEmits,defineProps,computed}from'vue'//显示......
  • 20240701
    https://cloud.tencent.com/developer/article/2018778HTMLDOMaddEventListener()方法document.addEventListener(event,function,useCapture)参数 描述event 必需。描述事件名称的字符串。注意:不要使用"on"前缀。例如,使用"click"来取代"onclick"。提示:所有HTML......
  • 20240701-薇薇的梦越来越奇怪了
    教练,我想玩原神了。昨晚梦到毕业旅行还是毕业晚会的晚上,看到rlh在玩原神。然后我站在旁边看他玩原神。还有个很离谱的。5月24号那天晚上,雷雨交加,我睡不着,翻来覆去在想之前和苏泊尔还有卡先生的一次谈话。想着想着,意识变得模糊了。然后开始做梦,而且好像是顺着我当时的......
  • 20240701总结(网络流)
    A-FlowProblemHDU3549FlowProblem题解:网络流版题,甚至今天早上我还只会EK(辛亏卡EK的没那么多,但是还是被迫学习dinic)B-WarHDU-3599War题意:求1到n最短路径(无向边)的最大条数(一条边不能重复经过)题解:题面就让人难懂,好像出题人在考生活实际和理解能力。看懂题就简单了,先跑......
  • ABC 328F Good Set Query
    题意直接看题吧https://atcoder.jp/contests/abc328/tasks/abc328_f题解本题主要考了带权并查集,具体实现是在路径压缩的时候顺便维护一下边权(其中w[i]表示点i距离它的祖先的边权之和,fa[i]是点i的祖先)。依次遍历每一次询问,如果询问中的a与b拥有公共祖先,也就是在同一个并查集里......
  • Red is good
    事先说明,看的题解题目描述桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。输入格式一行输入两个数R,B,其值在0到5000之间输出格式在最优策略下平均能得到多少钱。......
  • Red is good
    Description桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。Input一行输入两个数R,B,其值在0到5000之间Output在最优策略下平均能得到多少钱。解析设计状态:\(f[i]......
  • 电子邮件加密PGP(Pretty Good Privacy)浅聊
    邮件加密PGP(PrettyGoodPrivacyGPG(PrettyGoodPrivacy)GPG简介GPG背后的故事OpenPGPOpenPGP简介GPG(GNUPrivacyGuard)PGP算法PGPG算法介绍PGP工作流程PGP密钥交换PGP数字签名和验证数字签名过程数字签名算法数字签名编码格式验证过程GPG(PrettyGoodPrivacy)......
  • Good or bad?
    ThestoryIchose:Goodorbad?Thepointofviewofthestory:ThethirdpointofviewThepointofviewofmystory:Thefirstpointofview.Script:Longago,mysonandIlivedinafarawaytownneartheChineseborder.Wefarmedthelandandlivedamost......
  • [ARC159F] Good Division
    题意给定一个长度为\(2\timesn\)的数列\(S\)。称一个数列是好的,当且仅当数列中的数可以由每次删除相邻两个不同的数的操作删空。求划分该数列为若干好的字串的方案数。Sol集中注意力。首先显然长度为奇数的序列是没法做的。若序列存在绝对众数,则该序列一定无法删除......