package main import "fmt" var ( res int64 ) func main() { res = 0 var ( n int ) fmt.Scan(&n) arr := make([]int, n) for i := 0; i < n; i++ { fmt.Scan(&arr[i]) } smallSum(arr, 0, n-1) fmt.Println(res) } func smallSum(arr []int, l int, r int) { if r == l { return } mid := (r-l)/2 + l smallSum(arr, l, mid) smallSum(arr, mid+1, r) merge(arr, l, mid, r) } func merge(arr []int, l int, mid int, r int) { help := make([]int, r-l+1) i := l j := mid + 1 idx := 0 for i <= mid && j <= r { if arr[i] <= arr[j] { res += int64((r - j + 1) * arr[i]) help[idx] = arr[i] i++ } else { help[idx] = arr[j] j++ } idx++ } for i <= mid { help[idx] = arr[i] i++ idx++ } for j <= r { help[idx] = arr[j] j++ idx++ } for i := 0; i < len(help); i++ { arr[i+l] = help[i] } }