#588. 非零段划分

    ID: 588 传统题 1000ms 256MiB 尝试: 8 已通过: 2 难度: 3 上传者: 标签>CCF CSP认证第 23 次CCF CSP软件能力认证基础算法差分模拟

非零段划分

问题描述

A1,A2,,AnA_1,A_2,\dots,A_n 是一个由 nn 个自然数(非负整数)组成的数组。

我们称其中 Ai,,AjA_i,\dots,A_j 是一个非零段,当且仅当同时满足以下条件:

  • 1ijn1\le i\le j\le n
  • 对于任意的整数 kk,若 ikji\le k\le 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] 中的 44 个非零段依次为 [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] 仅有 11 个非零段;
  • 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,\dots,A_n

输出格式

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

输入样例 1

11
3 1 2 0 0 2 0 4 5 0 2

输出样例 1

5

输入样例 2

14
5 1 20 10 10 10 10 15 10 20 1 5 10 15

输出样例 2

4

输入样例 3

3
1 0 0

输出样例 3

1

输入样例 4

3
0 0 0

输出样例 4

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 都不含有非零段,故非零段个数至多为 0。

数据范围

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