leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
0218.cpp (988B)
0 class Solution {
1 public:
2 vector<vector<int>> getSkyline(const vector<vector<int>> &buildings) const {
3 using type_t = tuple<int, int>;
4 vector<type_t> vec;
5 vec.reserve(2 * size(buildings) + 1);
7 for (const auto &building : buildings) {
8 vec.emplace_back(building[0], +building[2]);
9 vec.emplace_back(building[1], -building[2]);
10 }
11 sort(begin(vec), end(vec));
12 vec.emplace_back(-1, -1);
14 multiset<int> st = {{0}};
15 vector<vector<int>> res;
16 for (int i = 0; i < size(vec) - 1; i++) {
17 const auto [x, h] = vec[i];
19 if (h > 0)
20 st.insert(h);
21 else
22 st.extract(-h);
24 if (x != get<0>(vec[i + 1])) {
25 const int height = *st.rbegin(); // 0 will always be there
26 if (res.empty() || res.back()[1] != height) res.push_back({x, height});
27 }
28 }
30 return res;
31 }
32 };