Submission #517723

#TimeUsernameProblemLanguageResultExecution timeMemory
517723athensclubBall Machine (BOI13_ballmachine)C++14
35.51 / 100
312 ms15764 KiB
#include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; int findMinSubtree(int node, vector<int> children[], int minSubtree[]) { if (minSubtree[node] > 0) return minSubtree[node]; int temp = node; for (int child : children[node]) temp = min(temp, findMinSubtree(child, children, minSubtree)); minSubtree[node] = temp; return temp; } void visitOrdered(int node, vector<int> children[], vector<int> &order) { for (int child : children[node]) visitOrdered(child, children, order); order.push_back(node); } int main() { int n, q; cin >> n >> q; int parent[n + 5]; int minSubtree[n + 5]; vector<int> children[n + 5]; int root; for (int i = 1; i <= n; i++) { minSubtree[i] = 0; cin >> parent[i]; if (parent[i] == 0) root = i; else children[parent[i]].push_back(i); } findMinSubtree(root, children, minSubtree); for (int i = 1; i <= n; i++) { sort(children[i].begin(), children[i].end(), [&minSubtree](const int node1, const int node2) { return minSubtree[node1] < minSubtree[node2]; }); } vector<int> orderToNode, nodeToOrder(n + 5); visitOrdered(root, children, orderToNode); for (int i = 0; i < orderToNode.size(); i++) nodeToOrder[orderToNode[i]] = i; priority_queue<int, vector<int>, greater<int>> orderToFill; int r = 0; for (int i = 0; i < q; i++) { int t, k; cin >> t >> k; if (t == 1) { int lastFilled = -1; while (k > 0 && !orderToFill.empty()) { lastFilled = orderToNode[orderToFill.top()]; orderToFill.pop(); k--; } if (k == 0) { cout << lastFilled << endl; } else { r += k; cout << orderToNode[r-1] << endl; } } else { orderToFill.push(nodeToOrder[k]); cout << 0 << endl; } } }

Compilation message (stderr)

ballmachine.cpp: In function 'int main()':
ballmachine.cpp:56:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     for (int i = 0; i < orderToNode.size(); i++)
      |                     ~~^~~~~~~~~~~~~~~~~~~~
ballmachine.cpp:55:17: warning: 'root' may be used uninitialized in this function [-Wmaybe-uninitialized]
   55 |     visitOrdered(root, children, orderToNode);
      |     ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...