P15582 [KTSC 2026] 平衡序列 / Balanced Sequence
题目描述
**平衡序列**的定义如下:
- 长度为 $1$ 的序列是平衡序列。
- 长 $2k+1$ 的序列 $S=[S_0,\ldots,S_{2k}]$ 是平衡序列,当且仅当:
- $[S_0,S_1,\ldots,S_{k-1}]$ 是平衡序列;
- $[S_{k+1},S_{k+2},\ldots,S_{2k}]$ 是平衡序列;
- $S_k$ 是 $S$ 中**唯一的**最大元素。
给定长度为 $N$ 的序列 $A$。定义 $A[i\ldots j]=[A_i,A_{i+1},\ldots,A_j]$。例如,若 $A=[3,5,7,2,9]$,则 $A[1\ldots 3]=[5,7,2]$,$A[4\ldots 4]=[9]$。
$Q$ 次操作,每次操作形如单点修改。操作是累积的。在初始状态和每次操作后,求出满足如下条件的 $(i,j)$ 对数:
- $0\le i\le j\le N-1$;
- $A[i\ldots j]$ 是平衡序列。
### 实现细节
**这是一道函数式交互题**。你不必,也不应实现 `main` 函数。
你应当实现以下的函数:
```cpp
long long initialize(int N, vector A)
```
- $N$:序列 $A$ 的长度。
- $A$:长度为 $N$ 的整数数组。
- 返回初始状态下,满足 $0\le i\le j\le N-1$ 且 $A[i\ldots j]$ 为平衡序列的 $(i,j)$ 对数。
- 该函数仅在运行之初被调用恰好一次。
```cpp
long long update_sequence(int p, int v)
```
- 该函数表示一次令 $A[p]\gets v$ 的操作。
- 返回操作后,满足 $0\le i\le j\le N-1$ 且 $A[i\ldots j]$ 为平衡序列的 $(i,j)$ 对数。
- 该函数在 `initialize` 函数调用后,被调用恰好 $Q$ 次。
你的源代码中不应调用任何输入/输出函数。
输入格式
示例评测程序的输入格式如下:
* 第 $1$ 行:$N$ $Q$
* 第 $2$ 行:$A[0]$ $A[1]$ ... $A[N-1]$
* 对于所有 $1 \le k \le Q$:
* 第 $2 + k$ 行:$p$ $v$(第 $k$ 次 `update_sequence` 的参数)
输出格式
示例评测程序按以下格式输出答案:
* 第 $1$ 行:`initialize` 的返回值
* 对于所有 $1 \le k \le Q$:
* 第 $1 + k$ 行:第 $k$ 次 `update_sequence` 的返回值
说明/提示
### 数据范围
- $1\le N\le 10^5$;
- $0\le Q\le 10^5$;
- $1\le A[i]\le 10^9$;
- $0\le p\le N-1$,$1\le v\le 10^9$。
### 子任务
| 编号 | 得分 | 限制 |
| :-: | :-: | :- |
| $1$ | $3 $ | $Q=0$,$A$ 是平衡序列 |
| $2$ | $5 $ | $Q=0$,$A[i]\le 3$ |
| $3$ | $12$ | $A[i]\le 3,v\le 3$ |
| $4$ | $18$ | $Q=0,N\le 2\, 000$ |
| $5$ | $26$ | $Q\le 10$ |
| $6$ | $36$ | 无额外限制 |
#### 样例 1
考虑 $N = 4$, $Q = 0$, $A = [1, 1, 1, 1]$ 的情况。
评测程序调用以下函数:
```cpp
initialize(4, [1, 1, 1, 1])
```
满足 $A[i \dots j]$ 是平衡序列的 $(i, j)$ 有 $(0, 0),(1, 1),(2, 2),(3, 3)$,因此它应该返回 $4$。
#### 样例 2
考虑 $N = 12$, $Q = 0$, $A = [8, 9, 7, 9, 2, 3, 2, 8, 4, 6, 2, 6]$ 的情况。
评测程序调用以下函数:
```cpp
initialize(12, [8, 9, 7, 9, 2, 3, 2, 8, 4, 6, 2, 6])
```
被调用的函数返回 $18$。
#### 样例 3
考虑 $N = 7$, $Q = 2$, $A = [1, 3, 4, 4, 2, 1, 6]$ 的情况。
评测程序按顺序调用以下函数:
```cpp
initialize(7, [1, 3, 4, 4, 2, 1, 6])
update_sequence(3, 1)
update_sequence(3, 2)
```
被调用的函数分别返回 $7, 9, 8$。