예제 #1
0
    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;
}