class Solution {
public:
vector<pair<int, int>> getSkyline(vector<vector<int>>& buildings) {
vector<pair<int,int>> v;
for (const auto& b : buildings) {
v.push_back({b[0], -b[2]});
v.push_back({b[1], b[2]});
}
sort(v.begin(), v.end());
multiset<int> q;
q.insert(0);
vector<pair<int, int>> res;
for (const auto& p : v) {
int pre = -*(q.begin());
if (p.second > 0) {
auto it = q.find(-p.second);
q.erase(it);
}
else {
q.insert(p.second);
}
int cur = -*(q.begin());
if (pre != cur) {
res.push_back( {p.first, cur} );
}
}
return res;
}
};