Submission #231518

#TimeUsernameProblemLanguageResultExecution timeMemory
231518borderBall Machine (BOI13_ballmachine)C++14
16.11 / 100
209 ms28280 KiB
#include <bits/stdc++.h> // #include <ext/pb_ds/assoc_container.hpp> // Common file // #include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update using namespace std; // using namespace __gnu_pbds; #define debug(s) cerr << #s << " = " << s << '\n' #define all(v) (v).begin(), (v).end() #define mem(a,val) memset(a, val, sizeof a) #define ff first #define ss second typedef long long ll; // typedef tree<pair<int, int>,null_type,less<pair<int, int>>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; const int N = 100010; int n, q, ptr, root; int T[N], P[N][20], L[N], col[N], val[N]; vector<int> adj[N]; set<pair<int, int>> s; void dfs(int from, int u, int dep) { T[u] = from; L[u] = dep; for (auto v: adj[u]){ if (v == from) continue; dfs(u, v, dep + 1); } val[u] = ptr; s.insert({ptr++, u}); } void init() { int i, j; for (i = 1; i <= n; i++) for (j = 0; 1 << j < n; j++) P[i][j] = -1; for (i = 1; i <= n; i++) P[i][0] = T[i]; for (j = 1; 1 << j < n; j++) for (i = 1; i <= n; i++) if (P[i][j - 1] != -1) P[i][j] = P[P[i][j - 1]][j - 1]; } int main() { scanf("%d %d", &n, &q); for (int i = 1; i <= n; ++i) { int x; scanf("%d", &x); if (x == 0) root = i; adj[x].push_back(i); } for (int i = 1; i <= n; ++i) sort(all(adj[i])); dfs(-1, root, 0); init(); while (q--) { int ty, v; scanf("%d %d", &ty, &v); if (ty == 1) { int ret; while (v--) { int node = (*s.begin()).ss; col[node] = 1; ret = node; s.erase({val[node], node}); } printf("%d\n", ret); } else { int ret = 0; for (int i = 16; i >= 0; --i) { if (col[P[v][i]]) { ret += (1 << i); v = P[v][i]; } } col[v] = 0; s.insert({val[v], v}); printf("%d\n", ret); } } }

Compilation message (stderr)

ballmachine.cpp: In function 'int main()':
ballmachine.cpp:51:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &n, &q);
   ~~~~~^~~~~~~~~~~~~~~~~
ballmachine.cpp:54:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &x);
     ~~~~~^~~~~~~~~~
ballmachine.cpp:63:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &ty, &v);
     ~~~~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...