首页 > 其他分享 >CF1787I Treasure Hunt 题解

CF1787I Treasure Hunt 题解

时间:2023-02-07 14:33:56浏览次数:65  
标签:CF1787I 前缀 子段 题解 sum Treasure 右边 贡献 dp

题目链接

题意描述:

定义一个序列的权值为一段前缀与一段子段,满足要么前缀与子段不交,要么完全包含的和的最大值,给定一个序列 \(a\),求 \(a\) 的所有子区间的权值和
\(n\le 10^6\)

发现如果前缀与子段有交且不包含,那么一定不优,因为子段未被包含的一段一定是正的,不然就不是最大子段了

因此可以把问题拆成两部分:所有子区间的最大前缀以及所有子区间的最大子段和

第一部分是 trivial 的,直接用单调栈或笛卡尔树求出贡献范围即可

第二部分显然考虑分治,对于跨过中点的区间的贡献,可以分成三种情况(即线段树求最大子段和的三种)

我们设 \(dp_l\) (\(dp_r\)) 表示从中点至左边(右边) \(l\) (\(r\))位置的最大子段和,\(sum_l\) (\(sum_r\))为最大前缀和

在从中点向左扫的过程中,首先 \(dp_l,sum_l\) 肯定是单调不降的,而 \(dp_l-sum_l\) 也是单调不降的,因为 \(dp_l\ge sum_l\),而新加入一个元素能贡献到 \(sum_l\) 那么也一定能贡献到 \(dp_l\),否则也有可能贡献到 \(dp_l\),所以差距不会变小,讨论一下三种情况的大小关系:

  1. \(dp_l>max(dp_r,sum_l+sum_r)\),拆成 \(dp_l>dp_r\) 和 \(dp_l>sum_l+sum_r\),移项得 \(dp_l-sum_l>sum_r\),因此取到这种情况的分界点 \(r\) 一定单调不降
  2. \(dp_r>max(dp_l,sum_l+sum_r)\),类似上一种,\(dp_r-sum_r>sum_l\),随着 \(l\) 的移动,可能的位置会越来越少
  3. \(sum_l+sum_r>max(dp_l+dp_r)\),拆开移项得 \(sum_l>dp_r-sum_r,sum_r>dp_l-sum_l\),那么这种情况的分界点是不断向后移动的

于是贡献分成三段,第一段显然是 \(dp_l\),第三段显然是 \(dp_r\),那么中间就是 \(sum_l+sum_r\) 了,直接前缀和维护

一个直观的理解:\(dp_l\) 越来越大,在右边比较短的时候没必要取右边一点点大的地方,但当右边比较大的时候,就可以把两边拼起来,右边非常大的时候,由于这时 \(dp_r\) 与 \(sum_r\) 的差距已经很大了,算上左边的 \(sum_l\) 也无济于事

时间复杂度 \(O(n\log n)\)

标签:CF1787I,前缀,子段,题解,sum,Treasure,右边,贡献,dp
From: https://www.cnblogs.com/pidan123/p/17098299.html

相关文章

  • Django关于站点管理Admin Site的常见问题解决方法
    1.改变django默认语言的方法?仅需添加’django.middleware.locale.LocaleMiddlewar’到MIDDLEWARE_CLASSES设置中,并确保它在’django.contrib.sessions.middleware.Session......
  • Android 软键盘弹出时布局内指定内容上移实现及问题解决
    AndroidSDK目前提供的软键盘弹出模式接口只有两种:一是弹出时自动回冲界面,将所有元素上顶,一种则是不重绘界面,直接将控件元素遮住,没有其他模式,如果......
  • CF1137F Matches Are Not a Child's Play 题解
    以最后被删去的点为根,这样子不会存在从父亲然后删掉某个点,儿子的删除顺序一定比父亲前。记每个点子树中的最大值为\(f_x\),那么一个点的排名,首先就需要加上\(<f_x\)的所......
  • robotframe环境搭建及问题解决
     1.安装pipinstallrobotframeworkipinstallrobotframework-ride进入C:\Python37\Scripts目录下,右击ride.py,选择使用python打开。出现RIDE界面表示RIDE安装成功。......
  • ABC288 EFG 题解
    E注意到后面选对前面的答案没有影响,而且前面选的顺序对后面的影响是连续的一段(如选2个,那么对应的\(c\)就应该是\(c[i-2..i]\)(对应\(i\)是1、2、3个选时的答案))然......
  • P3215 [HNOI2011]括号修复题解
    发现题解里的维护前后缀最大最小值的做法都是感性理解,所以我就来写个证明。将(看做\(-1\),)看做\(1\),首先几个变量:\(n\)代表括号序列的长度。\(a_i\)代表前缀和......
  • CF884D 题解
    题目传送门题目分析开始还真没看出来这题跟\(\text{P1090}\)合并果子的关系。其实只要逆向思考,把拆分看成效果一样的合并就可以了。而与合并果子不同的是,在这题当中......
  • abc285h题解
    考虑容斥,强制要求\(k\)个数为完全平方数,系数为\((-1)^k*C_n^k\)(因为我们要从\(n\)个数选出\(k\)个数作为完全平方数)。则在唯一分解\(p_1^{e_1}...p_n^{e_n}\)中,\(e_1...e_n......
  • "_OBJC_CLASS_$ [文件名1]referenced from in[文件名2]:ld: symbol(s) not found问题
    说实话开发一年多了,遇到了至少三次以上这种问题,很困惑,也很难搞觉得,其实很简单解决办法,在buildPhases中添加文件名1的.m文件即可了。"_OBJC_CLASS_$"PackageTourCustomAnnot......
  • 【题解】20230204解题报告
    解题报告20230204主要学习内容有:动态规划,字符串操作(在另外一篇文章里)T1:P5322[BJOI2019]排兵布阵首先题意是设定有n座城堡,s个玩家(不包括特殊玩家),此时每名玩家都有m......