//样例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
#include<iostream>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;
using ll = long long;
//70分暴力解法
int main() {
ll n;
ll ai;
set<ll> sa;//p的所有可能值,即数组A的集合
sa.insert(1);//这里插入1,是针对于数组A为全0的特殊情况,如样例4,因为1是p的最小取值
vector<ll> a;//数组A
cin >> n;
for (ll i = 0;i < n;i++) {
cin >> ai;
if (ai != 0) {//注意p不能取0,不然样例4的结果是1
sa.insert(ai);
}
a.push_back(ai);
}
vector<ll> vsa(sa.begin(), sa.end());//将set类型的sa变为vector类型方便写循环代码和使用
ll pi;//当前p的取值
ll pisum;//p取pi时的非零段个数
vector<ll> allpsum;//将每个pisum保存于此
//两层暴力循环
//这个暴力解法可以看做是把非零段和零段拆开,然后在一个循环内统计非零段的总个数
for (ll i = 0;i < vsa.size();i++) {
pisum = 0;
pi = vsa[i];
ll j = 0,k;
while (j < n) {
k = j;
if (a[j] < pi) {//这是小于p的段
while (k < n && a[k] < pi) {
k++;//直接将坐标前移
}
}
else {
pisum++;//这是大于p的段,也即非零段,非零段个数加一
while (k < n && a[k] >= pi) {
k++;//坐标前移
}
}
j = k;
}
allpsum.push_back(pisum);
}
cout<<*max_element(allpsum.begin(), allpsum.end())<<"\n";
return 0;
}