#P16027. [CSPro 23] 非零段划分

[CSPro 23] 非零段划分

题目背景

洛谷的测试数据仅供民间交流使用,非官方测试数据。官方评测链接:https://www.cspro.org/

题目描述

A1,A2,,AnA_1, A_2, \cdots , A_n 是一个由 nn 个自然数(非负整数)组成的数组。我们称其中 Ai,,AjA_i, \cdots , A_j 是一个非零段,当且仅当以下条件同时满足:

  • 1ijn1 \leq i \leq j \leq n;
  • 对于任意的整数 kk,若 ikji \leq k \leq j,则 Ak>0A_k > 0;
  • i=1i = 1Ai1=0A_{i-1} = 0;
  • j=nj = nAj+1=0A_{j+1} = 0

下面展示了几个简单的例子:

  • A=[3,1,2,0,0,2,0,4,5,0,2]A = [3, 1, 2, 0, 0, 2, 0, 4, 5, 0, 2] 中的 4 个非零段依次为 [3,1,2][3, 1, 2][2][2][4,5][4, 5][2][2]
  • A=[2,3,1,4,5]A = [2, 3, 1, 4, 5] 仅有 1 个非零段;
  • A=[0,0,0]A = [0, 0, 0] 则不含非零段(即非零段个数为 00)。

现在我们可以对数组 AA 进行如下操作:任选一个正整数 pp,然后将 AA 中所有小于 pp 的数都变为 00。试选取一个合适的 pp,使得数组 AA 中的非零段个数达到最大。若输入的 AA 所含非零段数已达最大值,可取 p=1p = 1,即不对 AA 做任何修改。

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数 nn

输入的第二行包含 nn 个用空格分隔的自然数 A1,A2,,AnA_1, A_2, \cdots , A_n

输出格式

输出到标准输出。

仅输出一个整数,表示对数组 AA 进行操作后,其非零段个数能达到的最大值。

11
3 1 2 0 0 2 0 4 5 0 2
5
14
5 1 20 10 10 10 10 15 10 20 1 5 10 15
4
3
1 0 0
1
3
0 0 0
0

提示

样例 1 解释

p=2p = 2 时,A=[3,0,2,0,0,2,0,4,5,0,2]A = [3, 0, 2, 0, 0, 2, 0, 4, 5, 0, 2],5 个非零段依次为 [3][3][2][2][2][2][4,5][4, 5][2][2];此时非零段个数达到最大。

样例 2 解释

p=12p = 12 时,A=[0,0,20,0,0,0,0,15,0,20,0,0,0,15]A = [0, 0, 20, 0, 0, 0, 0, 15, 0, 20, 0, 0, 0, 15],4 个非零段依次为 [20][20][15][15][20][20][15][15];此时非零段个数达到最大。

样例 3 解释

p=1p = 1 时,A=[1,0,0]A = [1, 0, 0],此时仅有 1 个非零段 [1][1],非零段个数达到最大。

样例 4 解释

无论 pp 取何值,AA 都不含有非零段,故非零段个数至多为 00

子任务

70%70\% 的测试数据满足 n1000n \leq 1000

全部的测试数据满足 n5×105n \leq 5 \times 10^5,且数组 AA 中的每一个数均不超过 10410^4