对于要打印的 \(B\),我们首先尝试确定 \(B_1\)。

让 \(f(x) (1≤x≤M)\) 是最大的 \(i\),使 \(A_i = x\)。

对于 \(r:=\underset{{{1≤x≤M}}}{\min}f(x)\),我们可以证明 \(B_1\) 是 \(A_1 ,A_2 ,...,A_r\) 中的一个(否则,\(B\) 是 \(A_{>r} :=(A_r+1 ,Ar+2,...,A_N)\)的一个子序列,但 \(A_{>r}\) 不包含 \(A_r\),这违反了 \(B\) 的条件)。

相反,存在一个长度为 \(M\) 的子序列,其第一个元素是 \(A_i\) 中的一个 \((1≤i≤r)\),它分别包含 \(1,2,...,M\) 一次。特别是,所有 \(A_{f(x)}\) 的子序列的 \(x\) 都有 \(x \neq A_i\)。

因此,\(B_1 =A_l = \underset{1≤i≤r}{\min}A_i\)。我们可以让 \(l\) 是最小的整数 \(j\),使\(A_j=\underset{1≤i≤r}{\min}A_i\)。

我们可以通过对以下序列重复类似的问题来确定\(B\)的所有元素(对元素进行适当的替换):

从 \(A\) 中除去前 \(l\) 项和所有使 \(A_i =B_1\) 的元素而得到的序列。

对一个序列的操作可以用一个优先级队列或一个段树来模拟。

在使用优先级队列管理 \((A_i ,i)\) 的情况下,我们可以通过把前r个词放在一起并找到它们的最小值来找到前 \(r\) 个元素的最小值。

移除 \(A\) 的前 \(l\) 个元素,并移除与某物相同的 \(A_i\),可以通过重复从优先级队列中移除一个元素来实现,只要队列中的顶级元素满足一个条件。

在段树的情况下,我们也可以做类似的事情。

移除与某事物具有相同价值的 \(A_i\),可以通过替换该 \(A_i\) 来实现。 删除时用 \(∞\) 来实现。

替换后,前 \(r\) 个元素的最小值是一个分段最小值。

这两种方法的时间复杂度都是 \(O(N\log{N})\),足够快。

Translated by Empty_Dream

Atcoder Beginner Contest 299 G的更多相关文章

  1. AtCoder Beginner Contest 272 - G - Yet Another mod M

    随机 + 数论 题意 Submission #35524126 - AtCoder Beginner Contest 272 给一个长度为 \(n\;(1<=n<=5000)\) 的数组 ...

  2. AtCoder Beginner Contest 260 G // imos(累积和算法)

    题目传送门:G - Scalene Triangle Area (atcoder.jp) 题意: 给定大小为N*N的OX矩阵,若矩阵的(s,t)处为O,其覆盖范围为:满足以下条件的所有位置(i,j) ...

  3. AtCoder Beginner Contest 282 G - Similar Permutation

    套路题 题意 求有多少个 \(1\) 到 \(n\) 的排列满足恰有 \(k\) 对在排列中相邻的数满足前小于后 \(2 \leq n \leq 500, 0 \leq k \leq (n - 1)\ ...

  4. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  5. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  6. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  7. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

  8. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  9. AtCoder Beginner Contest 177 题解

    AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...

  10. 题解 AtCoder Beginner Contest 168

    小兔的话 欢迎大家在评论区留言哦~ AtCoder Beginner Contest 168 A - ∴ (Therefore) B - ... (Triple Dots) C - : (Colon) ...

随机推荐

  1. 网络编程:非阻塞I/O

    阻塞VS非阻塞 阻塞I/O:应用程序会被挂起,等待内核完成操作,实际上,内核所做的事情是将CPU时间切换给其他有需要的进程,网络应用程序在这种情况下是得不到CPU时间做该做的事情的. 非阻塞I/O:当 ...

  2. vivo官网APP首页端智能业务实践

    作者:vivo 互联网客户端团队- Li Quanlong 本文介绍端智能技术在vivo官网APP的落地实践,通过抽象问题.提出端智能解决方案.方案落地这三大块内容逐步递进地展开端智能技术的应用过程. ...

  3. Qt图像处理技术三:图片亮度与对比度处理

    Qt图像处理技术三:图片亮度和对比度处理 github地址 实战应用项目: github :https://github.com/dependon/simple-image-filter //纯qt图 ...

  4. 记录一次自己用 AI 写IOS APP的经历

    我是几乎没有移动端开发经验的.仅有的一点安卓开发经验还是十几年前没毕业的时候自己瞎折腾. 故事的起源是每天辅导我儿子功课时的暴跳如雷. 我儿子上一年级了,在语文的生词上落后得非常严重(当然可能是他同学 ...

  5. 终极指南:Scrum中如何设置需求优先级

    需求众多不知道如何下手?总想先做简单的需求,复杂需求却一拖再拖?那么,我们是时候开始考虑如何设置需求优先级了. 本期终极指南将展示如何为需求设置有效优先级,如何有效管理工作量,让效率指数倍增长,搭配  ...

  6. C# 中委托和事件的深度剖析与应用场景

    引言 在 C# 编程中,委托和事件是两个非常重要的概念,它们为程序的设计和开发提供了强大的功能和灵活性.委托可以看作是一种类型安全的函数指针,它允许将方法作为参数传递给其他方法,从而实现回调机制.而事 ...

  7. 你应该懂的AI 大模型(五)之 LangChain 之 LCEL

    本文 对<LangChain>一文中的 Chain 与 LCEL 部分的示例进行详细的展示. 先回顾下 在LangChain框架中,Chain(链) 和 LCEL(LangChain Ex ...

  8. 关于Android studio项目崩溃报Binary XML file line #2: Error inflating class类错误解决办法

    以上是错误, 记录一下:查找方式:1.查看LOG日志,查看错误位置,以及问题.2.查找到问题后进行翻译,翻译后没有头绪,则仔细查看该错误,定位关键词比如上面:XML.line #2.MainActiv ...

  9. UFT 对时间的处理

    1. 当前时间的后n天 2. 当前时间的前n天  3. 当前时间 eg:

  10. java学习篇(一)—— CPP和Java的区别之基础概念

    一些感想 写在开头,如果你是一个坚定选择工作的研究生,在CPP和Java之间反复跳转,那么有以下几种情况,建议你选CPP: 对CPP有强大的兴趣,且组内有成熟的方向,例如:高性能计算.音频开发等方向, ...