Description
 
Submission
class Solution {
    const int M = 1e9 + 7;
public:
    int minAbsoluteSumDiff(vector<int>& nums1, vector<int>& nums2) {
        int n = nums1.size();
        vector<int> nums = nums1; 
        sort(nums.begin(), nums.end());
        int original = 0;
        int maxDiff = 0;
        for(int i = 0; i < n; ++i) {
            int curDiff = INT_MAX;
            auto it = upper_bound(nums.begin(), nums.end(), nums2[i]);
            if(it != nums.end()) {
                curDiff = min(curDiff, abs(*it - nums2[i]));
            }
            if(it != nums.begin()) {
                curDiff = min(curDiff, abs(*(it-1) - nums2[i]));
            }
            maxDiff = max(maxDiff, abs(nums1[i] - nums2[i]) - curDiff);
            original = (original + abs(nums1[i] - nums2[i])) % M;
        }
        return (original + M - maxDiff) % M;
    }
};
