首页 > 其他分享 >NOI2022模拟测试赛(二十二)

NOI2022模拟测试赛(二十二)

时间:2022-10-31 08:36:33浏览次数:53  
标签:二十二 弹掉 min 最大值 序列 NOI2022 模拟 区间 单调

link

通道

自己对于二分图构造一个类 prufer 序列。

一个映射方式是合法的,只需要:

  • 一棵生成树能构造出一个 prufer 序列。
  • 能从一个 prufer 序列逆推回整棵树的形态,即过程中不会出现 “找不到” 或者 “找到多个合法解” 的情况。

敢造就敢有!

排列

转化后题意:

给定三个长度同为 \(n\) 的序列 \(V,A,B\),保证 \(V_i>0\)。

求选出一个区间 \([l,r]\),最大化 \(\left(\sum_{i=l}^rV_i\right)+\min_{i=l}^r(A_i)+\min_{i=l}^r(B_i)\)。

\(n\leq 10^6\)。

题解:

用数据结构容易做到 \(O(n\log n)\),略去。此处讲线性做法:

看到区间 min,考虑建笛卡尔树,比如我们先对 \(A\) 序列建笛卡尔树。

笛卡尔树上一个点代表一段区间 \([L,R]\),且该区间内的任意子区间 \([l,r]\) 的 \(A_{\min}\) 都相同,此时我们只需要考虑 \([L,R]\) 的所有子区间 \([l,r]\) 中 \(\left(\sum_{i=l}^rV_i\right)+\min_{i=l}^r B_i\) 的最大值即可。

一个很重要的观察是:若 \(L<l\land r<R\),则 \([l,r]\) 必为 \(B\) 序列笛卡尔树的一个区间。

因为若不是,那么我们可以往两边扩使得 \(B_{\min}\) 不变且 \(\left(\sum_{i=l}^rV_i\right)\) 变大,直到 \([l,r]\) 为 \(B\) 序列笛卡尔树上的一个区间或者 \(l=L\) 或 \(r=R\) 为止。

所以我们先用 \(B\) 序列笛卡尔树上的所有区间更新一遍答案。这样 \(A\) 树上我们只需要考虑 \(l=L\) 或 \(r=R\) 的情况即可。

两种情况是类似的,不妨考虑 \(l=L\),即区间为前缀的情况。

暴力的做法是用单调栈维护出 \([L,R]\) 在 \(B\) 上前缀最小值的位置,假设它们分别为 \(p_1=L,\cdots,p_k\),那么显然 \(r\) 只可能在 \(p_2-1,\cdots,p_k-1\) 上取到(为了方便 \(l=L,r=R\) 的情况我们单独考虑)。

对于非暴力的方法,我们考虑合并两棵子树的单调栈。设左右儿子的 \(B\) 前缀最小值的单调栈分别为 \(BL,BR\)。

显然合并这两个栈是均摊 \(O(1)\) 的。但关键是怎么更新答案。

实际上我们只需要对于单调栈上的每一个点 \(p_i\) 求出 \(s_{p_{i+1}-1}+B_{p_{i}}\) 的最大值即可。

左右儿子合并时可能会把 \(BR\) 的一段头给弹掉,为了快速得到剩下一段后缀的 \(s_{p_{i}-1}+B_{p_{i-1}}\) 最大值,我们还需要另外一个单调栈来维护 \(s_{p_{i}-1}+B_{p_{i-1}}\) 的后缀最大值。

记左右儿子维护这玩意后缀最大值对应的单调栈分别为 \(ML,MR\),那么我们合并两个儿子的整个算法流程如下:

  1. 合并 \(BL,BR\),过程中会弹掉 \(BR\) 左边的一段,此时对应弹掉 \(MR\) 中属于这一段的部分,并做更新。
  2. 合并 \(ML,MR\),过程中会弹掉 \(ML\) 右边的一段。

然后你发现我们有可能会对一个单调栈左右都弹,此时需要用一个链表来维护。

总时间复杂度 \(O(n)\)。

标签:二十二,弹掉,min,最大值,序列,NOI2022,模拟,区间,单调
From: https://www.cnblogs.com/ez-lcw/p/16843030.html

相关文章

  • NOI2021模拟测试赛(六十)
    题面西克把\(x\toy\)拆成\(x\tolca\toy\),而\(x\tolca\)的部分很好搞,不予阐述。关键是\(y\tolca\)的部分,我们考虑离线解决。从上往下走时,对每种颜色\(c\)......
  • 【XSY4055】小K的疑惑(模拟最短路,值域并查集)
    题面小K的疑惑题解以下的数都是在\(b\)进制意义下讨论。默认\(n\geqb\),否则\(n<b\)可以特判答案为\(1\)。考虑DP,设\(d_r\)表示所有模\(n\)余\(r\)的正......
  • ddos模拟
    ddos模拟过程在服务器上启动一个服务dockerps查看当前网络状态curl-s-w'Httpcode:%{http_code}\nTotaltime:%{time_total}s\n'-o/dev/nullhttp://{IP地......
  • 【XSY3899】切割(思维,模拟二分图匹配)
    题面切割题解考虑这么一个边都和坐标轴平行的不规则图形,经过水平或竖直切割后,如何判断切割后的图形是个矩形。容易发现,如果切出来后的图形没有凹进去的点,它就是一个矩......
  • bios模拟器
    bios模拟器模拟器1基于英特尔®至强®处理器E5-2600v3产品家族的服务器BIOS模拟器此英特尔®BIOS模拟器模拟用户在按duringPOST时通常会看到的BIOS接口。......
  • RAID模拟器工具合集
    RAID模拟器工具合集RAID模拟器工具1这款模拟器之前已经发布过,这里不做过多解释,如需要了解可以查看前面发布的raid模拟器文章了解详细信息;RAID模拟器工具2此工具可帮......
  • 创建工程与模拟器
    一、创建项目1、安装后创建一个安卓项目2、选择类型  3、配置项目信息  4、创建成功  二、创建虚拟机1、点击右上方「......
  • 1822. 数组元素积的符号 : 简单模拟题
    题目描述这是LeetCode上的​​1822.数组元素积的符号​​,难度为简单。Tag:「模拟」已知函数 ​​signFunc(x)​​​将会根据​​x​​的正负返回特定值:如果​......
  • 915. 分割数组 : 简单模拟题
    题目描述这是LeetCode上的​​915.分割数组​​,难度为中等。Tag:「模拟」给定一个数组 ​​nums​​​,将其划分为两个连续子数组 ​​left​​​ 和 ​​right......
  • 华为模拟器ENSP,cisco PT,H3C的模拟器如何同时安装。
    这里简单记录一下,因为没有什么值得分析的点华为ENSP:eNSPV100R003C00SPC100Setupcisco:PacketTracer-7.3.0-win64-setupH3C:HCL_Setup_V3.0.1 这里需要注意一个点,就......