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;
}
};