P16027 [CSPro 23] 非零段划分
题目背景
洛谷的测试数据仅供民间交流使用,非官方测试数据。官方评测链接:。
题目描述
$A_1, A_2, \cdots , A_n$ 是一个由 $n$ 个自然数(非负整数)组成的数组。我们称其中 $A_i, \cdots , A_j$ 是一个非零段,当且仅当以下条件同时满足:
- $1 \leq i \leq j \leq n$;
- 对于任意的整数 $k$,若 $i \leq k \leq j$,则 $A_k > 0$;
- $i = 1$ 或 $A_{i-1} = 0$;
- $j = n$ 或 $A_{j+1} = 0$。
下面展示了几个简单的例子:
- $A = [3, 1, 2, 0, 0, 2, 0, 4, 5, 0, 2]$ 中的 4 个非零段依次为 $[3, 1, 2]$、$[2]$、$[4, 5]$ 和 $[2]$;
- $A = [2, 3, 1, 4, 5]$ 仅有 1 个非零段;
- $A = [0, 0, 0]$ 则不含非零段(即非零段个数为 $0$)。
现在我们可以对数组 $A$ 进行如下操作:任选一个正整数 $p$,然后将 $A$ 中所有小于 $p$ 的数都变为 $0$。试选取一个合适的 $p$,使得数组 $A$ 中的非零段个数达到最大。若输入的 $A$ 所含非零段数已达最大值,可取 $p = 1$,即不对 $A$ 做任何修改。
输入格式
从标准输入读入数据。
输入的第一行包含一个正整数 $n$。
输入的第二行包含 $n$ 个用空格分隔的自然数 $A_1, A_2, \cdots , A_n$。
输出格式
输出到标准输出。
仅输出一个整数,表示对数组 $A$ 进行操作后,其非零段个数能达到的最大值。
说明/提示
### 样例 1 解释
$p = 2$ 时,$A = [3, 0, 2, 0, 0, 2, 0, 4, 5, 0, 2]$,5 个非零段依次为 $[3]$、$[2]$、$[2]$、$[4, 5]$ 和 $[2]$;此时非零段个数达到最大。
### 样例 2 解释
$p = 12$ 时,$A = [0, 0, 20, 0, 0, 0, 0, 15, 0, 20, 0, 0, 0, 15]$,4 个非零段依次为 $[20]$、$[15]$、$[20]$ 和 $[15]$;此时非零段个数达到最大。
### 样例 3 解释
$p = 1$ 时,$A = [1, 0, 0]$,此时仅有 1 个非零段 $[1]$,非零段个数达到最大。
### 样例 4 解释
无论 $p$ 取何值,$A$ 都不含有非零段,故非零段个数至多为 $0$。
### 子任务
$70\%$ 的测试数据满足 $n \leq 1000$;
全部的测试数据满足 $n \leq 5 \times 10^5$,且数组 $A$ 中的每一个数均不超过 $10^4$。