package main

func main() {

}

func maxSubarraySumCircular(nums []int) int {
	globalMax, globalMin := nums[0], nums[0]
	currentMax, currentMin := 0, 0
	total := 0

	for _, num := range nums {
		currentMax = max(num, currentMax+num)
		currentMin = min(num, currentMin+num)
		total += num
		globalMax = max(globalMax, currentMax)
		globalMin = min(globalMin, currentMin)
	}

	if globalMax > 0 {
		return max(globalMax, total-globalMin)
	} else {
		return globalMax
	}

}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}