Loading

Leetcode 2070. 每一个查询的最大美丽值

如果这个题强制在线的话可以排序+二分+区间最值,但是注意题目一次把所有查询给到了,所以可以用离线做法,按照查询的价格排序,同时不断更新最大值

class Solution {
public:
    struct Q {
        int pos;
        int p;
        int ans;
    };
    static bool cmp1(Q a, Q b) {
        return a.p < b.p; // 按查询的价格对查询排序
    }
    struct Item {
        int p;
        int b;
    };
    static bool cmp2(Item a, Item b) {
        return a.p < b.p; // 按查询的价格对查询排序
    }
    static bool cmp3(Q a, Q b) {
        return a.pos < b.pos; // 按查询的价格对查询排序
    }
    vector<int> maximumBeauty(vector<vector<int>>& items, vector<int>& queries) {
        vector<Q> q;
        vector<Item> item;
        int cnt = 0;
        for(auto x : queries) {
            q.push_back({cnt, x, -1});
            cnt++;
        }
        for(auto x : items) {
            item.push_back({x[0], x[1]});
        }
        sort(q.begin(), q.end(), cmp1);
        sort(item.begin(), item.end(), cmp2);
        int pos = 0;
        int mx = 0;
        for(int i = 0; i < q.size(); i++) {
            while((pos < item.size() && item[pos].p <= q[i].p)) {
                mx = max(mx, item[pos].b);
                pos++;
            }
            q[i].ans = mx;
        }
        vector<int> ans;
        sort(q.begin(), q.end(), cmp3);
        for(auto x : q) {
            ans.push_back(x.ans);
        }
        return ans;
    }
};
posted @ 2025-03-09 21:11  脂环  阅读(16)  评论(0)    收藏  举报