Warning: session_start(): open(/tmp/sess_cc29dd163f956aadec150a59956eb6bb, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239
Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239
Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430
Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/Action/Export.php on line 103
Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/Action/Export.php on line 103
Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/Action/Export.php on line 103
=====Orac and Medians=====
====问题描述====
有一个长度为$n$的序列$a_i$,可以进行下面的操作:
选择$[L,R]$,然后把这个区间内所有的元素变为[L,R]中的中位数,如果偶数个元素就为排名$s/2$的元素的值,多组询问,求序列是否能全部变为$k$?
所有的$n$不超过$100000$
====思路====
显然我们关于中位数的题目,都可以通过0,1,2转化进行,具体来说,就是所有小于$k$的元素变为0,所有等于$k$的元素变为1,所有大于$k$的元素变为2
首先如果整个序列不存在$k$,显然不能全变成$k$。
我们还可以发现,如果$1$旁边是$2$,那么操作一下变成两个$1$,接下来就可以推到整个序列。
那么,我们考虑让$2$往两边扩展,如果有两个$2$在一个长度为3的区间内,那么我们就可以知道整个$2$可以向右推到整个序列中。
当然,如果一个长度为3的序列中含有$1$和$2$,那么显然也可以。
因此,只要讨论所有长度为2和3的序列中,含有至少两个非0元素,那么就一定可以。