vector<pair<int, int>> getSkyline(vector<vector<int>>& buildings) { n = 0; heap.resize(buildings.size()); id2heap.resize(buildings.size()); vector<pair<int, int>> results; vector<pair<int, int>> points; for (int i = 0; i < buildings.size(); i++) { points.push_back(make_pair(buildings[i][0], i+1)); points.push_back(make_pair(buildings[i][1], -(i+1))); } Comparator compare(buildings); sort(points.begin(), points.end(), compare); for (auto& p : points) { pair<int, int> res; if (p.second > 0) { int i = p.second-1; heap_insert(buildings[i][2], i); res = make_pair(p.first, heap_max()); } else { int i = -p.second-1; heap_delete(i); res = make_pair(p.first, heap_max()); } if (results.empty() || results.back().second != res.second) results.push_back(res); } return results; }
int main() { int A[MAXSIZE]; char choice[10]; char choice2[10]; int element; int heap_size; heap_size = 0; do { scanf("%s", choice); switch (choice[0]) { case 'i' : scanf("%d", &element); heap_insert(A, &heap_size, element); break; case 'e' : scanf("%s", choice2); printf("%d\n", extract_heap_max(A, &heap_size)); break; case 'm' : printf("%d\n", heap_max(A, &heap_size)); break; case 'p' : print_heap(A, &heap_size); break; case 'q' : break; default : printf("Incorrect command!\n"); break; } } while (choice[0] != 'q'); return 0; }