专栏文章
题解:P11283 「GFOI Round 2」Turtle and Nediam
P11283题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mint5oh5
- 此快照首次捕获于
- 2025/12/02 07:56 3 个月前
- 此快照最后确认于
- 2025/12/02 07:56 3 个月前
这篇题解是对 EuphoricStar 的题解的补充。
考虑什么数可能作为中位数。首先,序列的最大值是不可能作为中位数的。不妨把它记为下标 。
然后把序列分成两段,一段是 ,另一段是 。
我们先考虑第一段数中的一个下标 ,考虑答案 的判据。
这样做的目的是,如果我们能够找出以上所有可能的 ,那么在这些 中取 就一定是答案。
可以先考虑一个序列最终只能剩下三个数:, 中的最小值(记为 ),。首先,我们可以通过 删除 中的所有元素(除了 )。
其次, 以及 中的所有数都要全删光。若 中的最小值小于 中的最小值,那么不借助 , 中的数可以只剩下 中的最小值下标 , 中的最大值下标 。此时,借助 即可删除 ,借助 即可删除 。
若 中的最小值小于 中的最小值,那么 中的数也与上同理的方式就可以删光(除了 )。
假设我们已经把 或者 进行了如上操作,我们也可以先不借助 ,把它删成最小值下标 ,最大值下标 。这个时候,若 ( 是 中的最小值),我们可以先把 借助 删除,接下来只剩三个下标 ,中位数刚好是 。
从以上的表述可知,当 中的最小值小于 中的最小值,需要借助 的删除才能删除 中的所有数, 同理。
从以上的表述可知,最终剩下三个数的中位数刚好是 ,因为 只能使用一次,需要保证 的最小值小于 中的最小值或者 中的最小值。
现在对于一个区间 ,我们需要找出所有符合条件的 ,并用它们的 取 。首先求出最大值下标 。然后求出 中的最小值下标 ,以及 中的最小值下标 。
- 若 的最小值小于 中的最小值,我们需要保证 。
- 若 的最小值小于 中的最小值,我们需要求出在 前第一个比 小的数 ,然后我们需要保证 。 数组可以通过单调栈求出。
这两个范围是或的关系。求出范围取区间最大就行。
注意我们现在的讨论都在 的范围内。但是 是同理的。
- 若 的最小值小于 中的最小值,我们需要保证 。
- 若 的最小值小于 中的最小值,我们需要求出在 后第一个比 小的数 ,然后我们需要保证 。 数组也可以通过单调栈求出。
这两个范围是或的关系。求出范围仍然取区间最大就行。
然后这道题就做完了。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...