package main

import "math"
/**
 * 最大乘积
 * @param A int整型一维数组 
 * @return long长整型
*/
func solve( A []int ) int64 {
    // write code here
    if len(A) < 3 {
        return 0
    }

//  用三个数 记录 前三大的正数
// 用两个数 记录 最小的两个 负数
// 就是三种情况
// 1、前三大的正数相乘
// 2、最大的正数 和 最小的两个负数 相乘
// 3、0

//  三个数 记录前三最大 正数
    var max1, max2, max3 int64 = math.MinInt64, math.MinInt64, math.MinInt64
//   两个 记录前两最小 负数
    var min1, min2 int64 = math.MaxInt64, math.MaxInt64

    for _, d := range A {
        v := int64(d)

//      小于 最小 更新 前最二小
        if v < min1 {
            min2 = min1
            min1 = v
        }else if v < min2 {
            min2 = v
        }

//      如果大于 第一大 更新记录 前三大的数
        if v > max1 {
            max3 = max2
            max2 = max1
            max1 = v
        }else if v > max2 {
            max3 = max2
            max2 = v
        }else if v > max3 {
            max3 = v
        }
    }

//  有可能 三个负数 一个0的情况
//  所以加上0
//  三个最大的数 第一大的数和最小的两个负数
    return maxs(max1*min1*min2, max1*max2*max3, 0)
}

func maxs(a, b, c int64) int64 {
    max := a
    if b > max {
        max = b
    }
    if c > max {
        max = c
    }
    return max
}