/*本人动规初学者,勿喷
本题解题思路:动规个人理解为寻找最优子结构,即构建状态转移方程,记录重复计算值,减少非必要计算次数
本题计算乘积为正数的子数组长度,设置两个数组,分别用于记录0-n中的最长的正负子数组长度,仅仅只判断符号
当传入两个数组的输入数组值inits[i]时,判断其正负,正数则正数数组直接加一,负数视情况看是否要置零
inits[i]为负时同理,设置一个值ans来存储最大值
当inits[i]输入为0时,正负数组都要置零,因为java数组默认初始化为0,所以直接空过这一次循环
0不是正整数
*/
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception{
StreamTokenizer streamTokenizer = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter printWrit = new PrintWriter(new OutputStreamWriter(System.out));
streamTokenizer.nextToken();
int length = (int) streamTokenizer.nval;
int ans = 0;
int[] ints = new int[length];
for (int i = 0; i < length; i++) {
streamTokenizer.nextToken();
ints[i] = (int) streamTokenizer.nval;
}
int[] dp1 = new int[length];//乘积为正的子序列长度
int[] dp2 = new int[length];//乘积为负的子序列长度
if (ints[0] >0){
dp1[0] = 1;
} else if (ints[0] < 0){
dp2[0] = 1;
}
for (int i = 1; i < length; i++) {
if (ints[i] >0){//判断序列
dp1[i] = dp1[i-1] + 1; //当inits值为正时,乘积为正的子序列长度直接加一
dp2[i] = dp2[i-1] >0 ? dp2[i-1] + 1 : 0; //当inits中值为正时,判定前一个数是否为负,否则归零重新判定
}else if (ints[i] < 0){
dp1[i] = dp2[i-1] >0 ? dp2[i-1] +1 : 0 ; //当inits为负时,正数序列判断负数的序列,如果之前的序列为负,则为正,反之重新计算
dp2[i] = dp1[i-1] + 1; //判断值为负时,负数序列取决于正数序列
}
ans = Math.max(dp1[i],ans);
}
printWrit.println(ans);
printWrit.flush();
}
}