const rl = require("readline").createInterface({ input: process.stdin, }); const iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void (async function () { const n = parseInt(await readline()); const lineArr = (await readline()).split(" ").map(Number); if (lineArr.length !== n) { console.log("输入的长度和数组长度不匹配"); rl.close(); return; } //输出结果 console.log(calcSmallSum(lineArr)); rl.close(); })(); function calcSmallSum(arr) { if (arr.length < 2) return 0; return sort(arr, 0, arr.length - 1); } function sort(arr, left, right) { if (left === right) { return 0; } const mid = (left + right) >> 1; const leftSum = sort(arr, left, mid); const rightSum = sort(arr, mid + 1, right); const mergeSun = merge(arr, left, mid, right); return leftSum + rightSum + mergeSun; } function merge(arr, left, mid, right) { const result = []; let totalSum = 0; let l = left; let r = mid + 1; while (l <= mid && r <= right) { if (arr[l] <= arr[r]) { totalSum += arr[l] * (right - r + 1); result.push(arr[l++]); } else { result.push(arr[r++]); } } while (l <= mid) { result.push(arr[l++]); } while (r <= right) { result.push(arr[r++]); } for (let i = left; i <= right; i++) { arr[i] = result.shift(); } return totalSum; }