首页 > 其他分享 >[APIO2023] 序列

[APIO2023] 序列

时间:2023-07-28 14:24:59浏览次数:38  
标签:区间 pos 转化 leq APIO2023 序列 有交

[APIO2023] 序列

题意

求一个序列的子区间中中位数出现的最多次数。

题解

考试的时候被薄纱了,感觉自己太弱了/kk

首先题目求的是中位数,这种东西有一个经典的操作,将原序列转为 \(01\) 序列。

考虑枚举中位数 \(x\),将小于 \(x\) 的数设为 \(-1\),等于 \(x\) 的设为 \(0\),将大于 \(x\) 的设为 \(1\),设新数组为 \(b_i\) 。
容易发现对于一个区间 \([l,r]\) 来说,设 \(0\) 有 \(c_0\) 个,\(1\) 有 \(c_1\) 个,\(-1\) 有 \(c_2\) 个,合法当且仅当 \(|c_1+c_2| \leq c_0\) 。

我们考虑固定 \(c_9\) ,我们将区间 \([l,r]\) 分割为 \([l,L][L,R][R,r]\),\(L\) 和 \(R\) 是区间中 \(0\) 的最后和第一个位置。
显然我们是要在 \([l,L]\) 和 \([R,r]\) 中分别选取一段后缀和前缀,使得其符合条件。
知道每移动一个位置就只会变化 \(1\) ,所以我们知道 \(min\) 和 \(max\) 即可。
现在题意转化为要求满足 \(|[lmin,lmax]+[rmin,rmax]+\sum_{i=L}^{i \leq R}b_i| \leq c_o\)
我们知道中间这一坨可以转化为前缀和相减,设前缀和为 \(s\),就可以将条件转化为 \(|[lmin-s_{L-1},lmax-s_{L-1}]+[rmin+s_{R},rmax+s_{R}]| \leq c_o\)
转加为减
将条件转化为 \(|[s_{L-1}-lmax,s_{L-1}-lmin]-[rmin+s_{R},rmax+s_{R}]| \leq c_o\)
将两个区间设为 \([l_1,r_1],[l_2,r_2]\),相当于在两个区间中各选一个点,使得两点之间距离最小,显然有两种情况。
1.两个区间有交,距离为 \(0\),即满足 \(l_1 \leq r_2\) 且 \(l_2 \leq r_1\) 。
2.两个区间无交,距离为 \(\max (l_1-r_2,l_2-r_1)\)

注意到我们求最小的距离是为了判断能否做到小于等于 \(c_0\) 。
我们实际上只是要做这样一个判断是要判断最接近的两个端点的距离是否超过 \(c_0\) 。
这样我们会发现还有另一种方式可以判断即判断 \([l_1-c_0,r_1+c_0],[l_2,r_2]\) 是否有交。
注意到 \(c_0\) 可以写成 \(pos_r-pos_l+1\) 的形式,所以可以再转化为 \([l_1-(1-pos_l),r_1-(1-pos_l)],[l_2-pos_r,r_2+pos_r]\) 是否有交。
容易发现 \(l\) 区间只和 \(l\) 有关了,题目转化为我们要求最远的一个与这东西有交的区间,这样就转化为了一个二维偏序问题,离线扫描线解决即可。code

...

仔细一想发现其实这题的门槛很低。只需要知道二维偏序就可以做了。
实际上难的是一系列转化,最核心的思想就是将与两个相关的东西变成只与一个相关。
还有一些东西就是将一些不好处理的东西通过整体修改等东西转化为我们所熟知的操作。

标签:区间,pos,转化,leq,APIO2023,序列,有交
From: https://www.cnblogs.com/snow-panther/p/17587459.html

相关文章

  • Apache Shiro 反序列化漏洞(CVE-2016-4437)
    漏洞简介ApacheShiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。版本信息:ApacheShiro<=1.2.4漏洞名称:ApacheShiro1.2.4反序列化漏洞,即shiro-550反序列化漏洞。漏洞形成原理:1、检索RememberMecookie的......
  • Prufer序列
    P6086【模板】Prüfer序列Prüfer序列可以将树的计数问题转化为序列,而且可以和树实现\(O(n)\)互相转换。Prüfer序列定义:对于一颗无根树,每次选择一个编号最小的叶子节点(定义为度为\(1\)的点),记录它的父节点,直到最后只剩下两个点(因为节点\(n\)一定不会被删,是个常量,没有......
  • 代码随想录算法训练营第四十天| 300.最长递增子序列 674. 最长连续递增序列 718.
    300.最长递增子序列要求:可以删减任意个节点,最后保存最大的递增长度难点:410489如何保证全局的视角,看到很前面的节点是否大于当前的节点,而不是仅仅记录状态思路:dp[n],当子序列的末尾为N时,它的最大子序列长度也就意味着,N在它的子序列中是最大的,遍历这个N之前的所有序......
  • 比JDK最高快170倍,蚂蚁开源一款序列化框架!
    点击“终码一生”,关注,置顶公众号每日技术干货,第一时间送达! Fury是一个基于JIT动态编译和零拷贝的多语言序列化框架,支持Java/Python/Golang/JavaScript/C++等语言,提供全自动的对象多语言/跨语言序列化能力,和相比JDK最高170倍的性能。GitHub地址为:https://github.com/al......
  • P2127 序列排序 题解
    原题题目意思\(有一个数列a,每次可以挑选任意两个元素交换位置,代价为这两个元素的和,问把序列a升序排序所需的最小总代价\)\(定义数列上的一个有i个元素的环S使得s_1要换到s_2,s_2要到s_3,……,s_i要到s_1\)\(原图一个元素只有一个目标位置,所以可以看作一个有n点,n边的有向图\)......
  • PHP 中优雅的将JSON/XML/YAML 等数据反序列化成指定的类对象
    这个小事情何以需要记上一笔?实在是因为当用了各种编程语言以后,发现系统I/O处,尤其对外的接口Interface最重要,它或许可以被称为Specification,规约。PHP是混合型编程风格的语言,不强求完全的OOP。但是代码不OOP化的话,又得不到更多的开发工具的支持。尤其在PHP中如果只是用数组结......
  • 关于视图类和序列化类的知识
    1.代码classPayOrderView(GenericViewSet):serializer_class=PaySerializerdefcreate(self,request,*args,**kwargs):ser=self.get_serializer(context={'request':request},data=request.data)ser.is_vaild(raise_exceptio......
  • JAVA 序列化(创建可复用的 Java 对象)
    保存(持久化)对象及其状态到内存或者磁盘Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将......
  • 帆软channel反序列化漏洞
    一级测试一级级测试测试二级测试测试三级测试二级测试......
  • 数据分享|SAS与eviews用ARIMA模型对我国大豆产量时间序列预测、稳定性、白噪声检验可
    全文链接:http://tecdat.cn/?p=31480最近我们被客户要求撰写关于ARIMA的研究报告,包括一些图形和统计输出。我国以前一直以来都是世界上大豆生产的第一大国。但由于各国的日益强大,导致我国豆种植面积和产量持续缩减。因此,预测我国的大豆产量对中国未来的经济发展有着极其重要的作......