首页 > 其他分享 >10.20模拟赛 序列

10.20模拟赛 序列

时间:2022-10-21 15:00:08浏览次数:73  
标签:10.20 max 取反 贡献 leq 权值 序列 模拟

10.20模拟赛 序列

题意

给出长度为 \(n\) 的序列 , 对所有 \(K\in[1,N]\) 求出长度为 \(K\) 的子序列的权值最大值。

\(1 \leq n \leq 2\times10^5\)

解法

这个东西是长得比较奇怪的 \((max,+)\) 卷积。考虑怎么优化。

对于 \(O(n^2)\) 就维护 \(f(i,j)\) 表示目前处理到序列的第 \(i\) 个元素,子序列长度为 \(j\) 的权值最大值。然后我们一个一个向内部加入元素,转移就是 \(f(i,j) = \max \{f(i-1,j),f(i-1,j-1) ±a_i\}\)。

这个暴力就是普通的 \((max,+)\) 卷积。总质量和单个物品质量没有什么特殊性质,接下来只剩下凸性这条路径了。

接下来,我们将证明 \(K\) 的奇偶分开后,在 \(i\) 固定的情况下 \(f(i,K)\) 是满足凸性的。

这里只证明偶数的情况,奇数的情况可以以此类推。

因为这里是偶数间的转移,所以我们加入物品可以视作两个两个加入。

我们将 \(f(i,K)\) 的选择序列进行划分。

假设原选择序列为

\[A_{i_1},A_{i_2},A_{i_3},A_{i_4},...,A_{i_{k-1}},A_{i_k} \]

偶数位置贡献为负数,奇数位置贡献为正数。我们插入两个元素\(A_l,A_r\),即加上 \(A_l - A_r\) 然后将 \((l,r)\) 内的所有元素取个反。

把贡献拆开来,变成取反 \([1,r]\) 然后取反 \([1,l]\).

设目前填的序列中 \(g(x)\) 为 \([1,x]\) 的贡献。

那么贡献即为 \(A_l + g(l) - A_r - g(r)\). 我们每次选择最大权值的 \(l\) 和最小权值的 \(r\) 即可。

接着我们只需证明对于 \(g(l) - g(r) (1\leq l \leq r \leq n)\) 具有单调递减的性质,即可得知每次新的贡献与整个 \(f\) 同样具有凸性。

我们发现当贡献产生在 l 左侧或 r 右侧时,该值不变。
当贡献产生在中间时才能产生贡献。
设产生影响的点为 \(j\)
那么 \((l,j)\) 间的取反才会产生贡献。若 \((l,j)\) 间的取反产生的贡献为正。那么对于先前的决策而言,加入 \((l,r)\) 并没有加入 \((l,j)\) 优秀。

因此我们取反产生的 \(( g(l) - g(r) )\) 总为负数。凸性得证

知道了凸性,我们考虑利用这个性质。

然后我们进一步分析转移。

我们先写出较为暴力的形式

其中 \(f(x),g(x)\) 表示长度为 \(x\) 的子序列的权值最大值和最小值

考虑如何合并左右两个区间

\[\left\{\begin{matrix} f'(K) = \max\{\max_{i+j=k,\text{i is odd} }\{ f_l(i) - g_r(j)\} , \max_{i+j=k,\text{i is even} }\{ f_l(i) + f_r(j)\}\}\\ g'(K) = \min\{\min_{i+j=k,\text{i is odd} }\{ g_l(i) - f_r(j)\} , \min_{i+j=k,\text{i is even} }\{ g_l(i) + g_r(j)\}\} \end{matrix}\right. \]

由于这个是凸的,因此差分数组单调,使用two pointer即可优化合并凸壳至线性。
利用合并线性的性质,我们结合分治,就可以做到 \(O(nlogn)\) 的优质复杂度。

代码

标签:10.20,max,取反,贡献,leq,权值,序列,模拟
From: https://www.cnblogs.com/Hencecho/p/16813482.html

相关文章

  • PHP版web 微信协议模拟登录
    见图:     <?php/***Desc:微信web核心协议实现*/functionarray_to_json($data){$data=json_encode($data,JSON_UNESCAPED_UNICODE);ret......
  • json模拟数据,实现增删该查
    operation.jsconst{rejects}=require('assert')constfs=require('fs')const{resolve}=require('path')/*查询数据*/constqueryData=({......
  • NFC门禁卡模拟
    使用nfc模拟全加密门卡过程1、门禁卡大多采用IC制卡和ID制卡ID卡:内部仅存储一个卡号信息,无加密区域。由于手机、手环无法模拟该卡种,所以这里不做讨论和扩展IC卡:本身具......
  • 10.20.1
    #include<stdio.h>intmain(){ intn,i,j,count=0; scanf("%d\n",&n); chararr[n+9]; gets(arr); for(i=0;i<n-1;i++){ for(j=0;j<n-1-i;j++) {if(arr[j]>arr[j+1......
  • 【闲话】2022.10.20
    明天就要走了,好欸好家伙,又来一个紫荆花之恋绷不住了BK又要开始了CSP2022RP+=INF!!今天真不想该题了以及闫某人你把代码放多项式乘法里,几个意思?有水平地赫题......
  • 社论 22.10.20 高斯整数环
    高斯环上的二维数点所以来水社论了(给定\(r\)。这给出了圆\(C:x^2+y^2=r^2\)。求在\(C\)圆周上的整点个数。\(r\leq10^{14}\)。数论题。记\(N=r^2\)。于是我......
  • P7914 括号序列
    \(\rmP7914\)[CSP2021]括号序列加深理解做题简记。这里觉得第一篇题解的做法是最优秀的,因为这才是真正的dp强调的不重不漏。这个做法只设了一个dp数组,应该跟其他设......
  • 2022.10.20小记
    想下班,又困又饿又虚弱,我的好朋友们已经在给我分享他们的晚饭了,而我还得接着干一小时。晚上不想去游泳了,累死了收到了新的鼠标,很开心没有其他特别的事了......
  • 解密地理位置模拟攻防之道
    有钱赚的地方就有黑灰产。近几年,随着互联网技术的发展,黑灰产的规模也日渐庞大。据统计,国内黑灰产从业者规模超过百万;2021年,黑灰产造成的损失已高达千亿级,可预见的是,凡有利......
  • .NET Core 3.0使用JsonSerializer(System.Text.Json)序列化和反序列化JSON
    本文主要介绍.NETCore3.0中,使用JsonSerializer(System.Text.Json)对JSON数据进行序列化和反序列化的方法及示例代码。 1、使用的命名空间usingSystem.Text.Json;......