寻找中位数 plus
题号:NC265093
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

给定一个长度为 n 的正整数数组 a 和一个正整数 k

你需要处理 q 次操作,每次操作属于以下两种类型之一:
\bullet 1~i~x : 将 a_i 赋值为 x
\bullet 2~l~r : 询问区间 [l, r] 中是否存在长度大于等于 2 的连续子数组,使得这个子数组的中位数为 k

中位数:一个长度为 m 的数组 b 的中位数,是将该数组按非降序排序之后的第 \lfloor \frac{m+1}{2} \rfloor 个数。

例如,数组 [1,6,5,2,4] 的中位数是 4,数组 [5,1,7,8] 的中位数是 5

输入描述:

第一行三个整数 n, k, q (2 \leqslant n, q \leqslant 2 \times {10}^5, 1 \leqslant k\leqslant {10}^9),表示数组长度,想要得到的中位数,以及操作次数。

第二行 n 个整数,第 i 个整数 a_i (1\leqslant a_i \leqslant {10}^9) 表示数组 a 中第 i 个整数的值。

接下来 q 行每行三个数表示一次操作,属于以下两种之一:
\bullet 1~i~x (1 \leqslant i \leqslant n, 1 \leqslant x \leqslant {10}^9) : 将 a_i 赋值为 x
\bullet 2~l~r (1 \leqslant l \leqslant r \leqslant n) : 询问区间 [l, r] 中是否存在长度大于等于 2 的连续子数组,使得这个子数组的中位数为 k,如果存在输出 \texttt{YES},否则输出 \texttt{NO}

输出描述:

对于每次询问(第二种操作),如果存在则输出 \texttt{YES},否则输出 \texttt{NO}大小写敏感)。
示例1

输入

复制
5 6 5
3 4 5 6 7
2 4 4
2 3 4
2 4 5
1 5 1
2 1 5

输出

复制
NO
NO
YES
NO