P9371 [APIO2023] 序列 / sequence
题目背景
**由于部分 BUG,使用 C++14 (GCC9) 提交会产生编译错误,请使用 C++14 等语言进行提交。**
提交时,无需引用 `sequence.h`。你提交的代码中需要实现以下函数:
```cpp
int sequence(int N, std::vector A)
```
题目描述
在迷人的 APIO 国,居住一位着年轻智慧的学生 Alice。Alice 对解决能挑战她数学能力的有趣问题有着永不满足的好奇心。一天,她在解决一个神秘的有关长为 $N$ 的序列 (即 $A[0], A[1], \cdots, A[N-1]$ ) 的问题时遇到了困难,她无法抗拒探索答案的诱惑力。
现在,她想要与你分享一些她的发现。不过,为了更好的理解,我们需要给出以下定义:
- 定义 $W(l, r, x)$ 为 $\sum_{i=l}^{r} \mathbb{I}[A[i]=x]$, 即 $x$ 在 $A[l] \cdots A[r]$ 中的出现次数。
- 定义一个非空整数序列 $B[0] B[1] \cdots B[k-1]$ 的中位数集合为 $S(\{B[0], B[1] \cdots B[k-1]\})$, 然后 Alice 会展示如何分步计算中位数集合:
○首先,将序列 $B[0], B[1], \ldots, B[k-1]$ 按照升序排序,令排好序的序列为 $C[0], C[1], \ldots, C[k-1]_{0}$
○ 然后, $S(\{B[0], B[1] \cdots B[k-1]\})=\left\{C\left[\left\lfloor\frac{k-1}{2}\right]\right], C\left[\left\lceil\frac{k-1}{2}\right\rceil\right]\right\}$ 。
○ 为了能更好的理解 $S$ 的计算,以下为一些例子:
- $S(\{6,3,5,4,6,2,3\})=\{4\}$.
- $S(\{4,2,3,1\})=\{2,3\}$
- $S(\{5,4,2,4\})=\{4\}$.
作为一道具有挑战性的问题, Alice 想对于所有的 $(l, r)(0 \leq l \leq r \leq N-1)$ 找到其价值 $\max _{x \in S(l, r)} W(l, r, x)$ 的最大值。其中 $S(l, r)$ 代表 $A[l] \cdots A[r]$ 导出的中位数集合(正如之前提到的 $S(A[l], \cdots, A[r])$ )。虽然 Alice 已经得到了答案,她需要核对答案的正确性,所以她找到了你,希望你能编程解决问题。
### 实现细节
你需要实现如下的过程:
```cpp
int sequence(int N, std:: vector A);
```
- $N$ :序列 $A$ 的长度。
- $A$ : 一个长度为 $N$ 的数组,即输入中提到的序列 $A$ 。
- 该函数应返回一个整数,代表所有可行 $(l, r)$ 价值的最大值。
- 这个函数恰好被调用一次。
输入格式
无
输出格式
无
说明/提示
### 例子
#### 样例 1
考虑如下的调用:
```cpp
sequence(7,{1,2,3,1,2,1,3});
```
函数应返回 $3$。
在这个样例中, $S(0,5)=\{1,2\}, W(0,5,1)=3 , W(0,5,2)=2$ ,所以 $(0,5)$ 的价值为 3 。
容易验证 $(0,5)$ 在所有合法的 $(l, r)$ 二元组中有着最大的价值。
#### 样例 2
考虑如下的调用:
```cpp
sequence(9,{1,1,2,3,4,3,2,1,1});
```
函数应返回 $2$。
### 样例 3
考虑如下的调用:
```cpp
sequence(14,{2,6,2,5,3,4,2,1,4,3,5,6,3,2});
```
函数应返回 $3$。
### 约束条件
- $1 \leq N \leq 5 \times 10^{5}$
- $1 \leq A[i] \leq N$
### 子任务
1. (11 分):$N \leq 100$ 。
2. (17 分):$N \le 2 \times 10^{3}$ 。
3. (7 分):存在一个 $x$ 满足 $\forall 0 \leq i