class Solution {
public:
vector<pair<int, int>> getSkyline(vector<vector<int>>& buildings) {
vector<pair<int, int>> res;
priority_queue<pair<int, int>> liveBlg;
int curr = 0, currX;
while (curr < buildings.size() || !liveBlg.empty()) {
if (liveBlg.empty() || curr < buildings.size() && liveBlg.top().second >= buildings[curr][0]) {
currX = buildings[curr][0];
while (curr < buildings.size() && buildings[curr][0] == currX) {
liveBlg.emplace(buildings[curr][2], buildings[curr][1]);
curr++;
}
}
else {
currX = liveBlg.top().second;
while (!liveBlg.empty() && liveBlg.top().second <= currX) liveBlg.pop();
}
int currH = liveBlg.empty() ? 0 : liveBlg.top().first;
if (res.empty() || currH != res.back().second) res.emplace_back(currX, currH);
}
return res;
}
};