3
long long minimumDifference(vector<int> &nums) {4
long long ans = LLONG_MAX, suml = 0, sumr = 0, sumll, sumrr;5
int n = nums.size() / 3;6
priority_queue<int> lpq;7
priority_queue<int, vector<int>, greater<int>> rpq;8
for (int i = 0; i < n; i++) {9
lpq.push(nums[i]), suml += nums[i];10
rpq.push(nums[i + 2 * n]), sumr += nums[i + 2 * n];14
vector<long long> leftdp(n), rightdp(n);15
ans = min(ans, suml - sumr);16
for (int i = n; i < 2 * n; i++) {17
if (lpq.top() > nums[i]) {25
for (int i = 2 * n - 1; i >= n; i--) {26
if (rpq.top() < nums[i]) {32
rightdp[i - n] = sumr;34
for (int i = 0; i + 1 < n; i++) ans = min(ans, leftdp[i] - rightdp[i + 1]);35
ans = min(ans, leftdp[n - 1] - sumrr);36
ans = min(ans, sumll - rightdp[0]);