专栏文章

题解: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 的题解的补充。
考虑什么数可能作为中位数。首先,序列的最大值是不可能作为中位数的。不妨把它记为下标 xx
然后把序列分成两段,一段是 [l,x)[l,x),另一段是 (x,r](x,r]
我们先考虑第一段数中的一个下标 ii,考虑答案 pi\ge p_i 的判据。
这样做的目的是,如果我们能够找出以上所有可能的 ii,那么在这些 pip_i 中取 max\max 就一定是答案。
可以先考虑一个序列最终只能剩下三个数:pip_i[i,x)[i,x) 中的最小值(记为 ptp_t),pxp_x。首先,我们可以通过 pt,pxp_t,p_x 删除 (i,x)(i,x) 中的所有元素(除了 ptp_t)。
其次,[l,i][l,i] 以及 (x,r](x,r] 中的所有数都要全删光。若 [i,x)[i,x) 中的最小值小于 (x,r](x,r] 中的最小值,那么不借助 pxp_x(x,r](x,r] 中的数可以只剩下 (x,r](x,r] 中的最小值下标 aa(x,r](x,r] 中的最大值下标 bb。此时,借助 x,a,bx,a,b 即可删除 bb,借助 t,x,at,x,a 即可删除 aa
[i,x)[i,x) 中的最小值小于 [l,i][l,i] 中的最小值,那么 [l,i][l,i] 中的数也与上同理的方式就可以删光(除了 pip_i)。
假设我们已经把 [l,i][l,i] 或者 (x,r](x,r] 进行了如上操作,我们也可以先不借助 pxp_x,把它删成最小值下标 aa,最大值下标 bb。这个时候,若 pa<ptp_a<p_tptp_t[i,x)[i,x) 中的最小值),我们可以先把 ptp_t 借助 t,x,at,x,a 删除,接下来只剩三个下标 i,a,xi,a,x,中位数刚好是 pip_i
从以上的表述可知,当 [l,i][l,i] 中的最小值小于 [i,x][i,x] 中的最小值,需要借助 ptp_t 的删除才能删除 [l,i][l,i] 中的所有数,(x,r](x,r] 同理。
从以上的表述可知,最终剩下三个数的中位数刚好是 ii,因为 ptp_t 只能使用一次,需要保证 [i,x][i,x] 的最小值小于 [l,i][l,i] 中的最小值或者 (x,r](x,r] 中的最小值
现在对于一个区间 [l,r][l,r],我们需要找出所有符合条件的 ii,并用它们的 pip_imax\max。首先求出最大值下标 xx。然后求出 [l,x][l,x] 中的最小值下标 aa,以及 [x,r][x,r] 中的最小值下标 bb
  • [i,x][i,x] 的最小值小于 [l,i][l,i] 中的最小值,我们需要保证 iai \leq a
  • [i,x][i,x] 的最小值小于 (x,r](x,r] 中的最小值,我们需要求出在 zz 前第一个比 zz 小的数 LzL_z,然后我们需要保证 iLzi \leq L_zLL 数组可以通过单调栈求出。
这两个范围是或的关系。求出范围取区间最大就行。
注意我们现在的讨论都在 i[l,x)i \in [l,x) 的范围内。但是 i(x,r]i \in (x,r] 是同理的。
  • [x,i][x,i] 的最小值小于 [i,r][i,r] 中的最小值,我们需要保证 ibi \ge b
  • [x,i][x,i] 的最小值小于 [l,x][l,x] 中的最小值,我们需要求出在 yy 后第一个比 zz 小的数 RzR_z,然后我们需要保证 iRzi \ge R_zRR 数组也可以通过单调栈求出。
这两个范围是或的关系。求出范围仍然取区间最大就行。
然后这道题就做完了。

评论

0 条评论,欢迎与作者交流。

正在加载评论...