Untitled

 avatar
unknown
plain_text
3 days ago
2.0 kB
1
Indexable
class Solution {
public:

    int minWastedSpace(vector<int>& p, vector<vector<int>>& b) {
        int n = p.size();
        int m = b.size();
        sort(p.begin(),p.end());
        vector <long long> prefix(n+1,0);
        for(int i=1;i<=n;i++){
            prefix[i]=prefix[i-1]+p[i-1];
        }
        long long ans = 1e9;
        for(int i=0;i<m;i++){
            sort(b[i].begin(),b[i].end());
            cout << "i " << i << endl;
            long long temp = 0;
            int last = 0;
            for(int j=0;j<b[i].size();j++){
                cout << "j " << j << endl;
                int l = last;
                int r = n-1;
                int index = -1;
                long long box = b[i][j];
                cout << "box " << box << endl;
                while(l<=r){
                    int mid = l + (r-l)/2;
                    if(p[mid] <= box){
                        index = mid;
                        l = mid + 1;
                    }
                    else{
                        r = mid -1;
                    }
                }

                cout << "index " << index << endl;
                l = last;
                if(index!=-1){
                    last = r+1;
                    long long mod = 1e9+7;
                    long long sum = prefix[index+1]-prefix[l];
                    long long box_sum = box * (index - l+1);
                    cout << "sum " << sum << " box_sum " << box_sum << endl;
                    temp += (box_sum - sum)%(mod);
                }
                cout << "last " << last << endl;
                if(last==n){
                    break;
                }
            }
            cout << "temp " << temp << endl;
            cout << endl;
            long long mod = 1e9+7;
            if(last==n){
                ans = min(ans,temp%(mod));
            }
        }
        if(ans==1e9){
            return -1; 
        }
        return (int)ans;

    }
};
Leave a Comment