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