#include <bits/stdc++.h>
#define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x)
#define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x)
typedef long long ll;
typedef std::pair<int, int> pii;
typedef std::pair<ll , ll > pll;
using namespace std;
const int N = 100'032;
const int lg = 17;
vector<int> A[N];
bitset<N> is_free;
int anc[N][lg];
int dfs_time[N], inv_dfs_time[N];
int height[N];
int rt;
int smallest[N];
int dfs1(int v)
{
smallest[v] = v;
for (int u : A[v])
smallest[v] = min(smallest[v], dfs1(u));
return smallest[v];
}
void dfs2(int v, int p, int h, int &t)
{
height[v] = h;
anc[v][0] = p;
Loop (i,0,lg-1)
anc[v][i+1] = anc[anc[v][i]][i];
for (int u : A[v])
dfs2(u, v, h+1, t);
dfs_time[v] = t;
inv_dfs_time[t] = v;
++t;
}
int add(int cnt)
{
int lst = -1;
while (cnt--) {
lst = is_free._Find_next(lst);
is_free[lst] = 0;
}
return inv_dfs_time[lst];
}
int rem(int v)
{
int u = v;
LoopR (i,0,lg) {
if (!is_free[dfs_time[anc[u][i]]])
u = anc[u][i];
}
is_free[dfs_time[u]] = 1;
return height[v] - height[u];
}
int main()
{
cin.tie(0) -> sync_with_stdio(false);
int n, q;
cin >> n >> q;
Loop (i,0,n) {
int p;
cin >> p;
if (p)
A[p-1].push_back(i);
else
rt = i;
}
dfs1(rt);
Loop (i,0,n) {
sort(A[i].begin(), A[i].end(), [&](int v, int u) {
return smallest[v] < smallest[u];
});
}
dfs2(rt, rt, 0, *new int(0));
is_free.set();
while (q--) {
int t, x;
cin >> t >> x;
if (t == 1)
cout << add(x)+1 << '\n';
else
cout << rem(x-1) << '\n';
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
2644 KB |
Output is correct |
2 |
Correct |
67 ms |
9292 KB |
Output is correct |
3 |
Correct |
50 ms |
9548 KB |
Output is correct |
4 |
Correct |
2 ms |
2644 KB |
Output is correct |
5 |
Correct |
2 ms |
2644 KB |
Output is correct |
6 |
Correct |
2 ms |
2772 KB |
Output is correct |
7 |
Correct |
2 ms |
2772 KB |
Output is correct |
8 |
Correct |
2 ms |
2772 KB |
Output is correct |
9 |
Correct |
7 ms |
3092 KB |
Output is correct |
10 |
Correct |
15 ms |
4472 KB |
Output is correct |
11 |
Correct |
64 ms |
9248 KB |
Output is correct |
12 |
Correct |
51 ms |
9468 KB |
Output is correct |
13 |
Correct |
69 ms |
9264 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
29 ms |
6220 KB |
Output is correct |
2 |
Correct |
108 ms |
16072 KB |
Output is correct |
3 |
Correct |
53 ms |
12360 KB |
Output is correct |
4 |
Correct |
51 ms |
6864 KB |
Output is correct |
5 |
Correct |
54 ms |
6732 KB |
Output is correct |
6 |
Correct |
41 ms |
6740 KB |
Output is correct |
7 |
Correct |
39 ms |
6044 KB |
Output is correct |
8 |
Correct |
27 ms |
6176 KB |
Output is correct |
9 |
Correct |
114 ms |
16584 KB |
Output is correct |
10 |
Correct |
105 ms |
16052 KB |
Output is correct |
11 |
Correct |
106 ms |
16132 KB |
Output is correct |
12 |
Correct |
114 ms |
14324 KB |
Output is correct |
13 |
Correct |
76 ms |
18560 KB |
Output is correct |
14 |
Correct |
58 ms |
12376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
47 ms |
9668 KB |
Output is correct |
2 |
Correct |
125 ms |
14656 KB |
Output is correct |
3 |
Correct |
106 ms |
17100 KB |
Output is correct |
4 |
Correct |
71 ms |
13900 KB |
Output is correct |
5 |
Correct |
74 ms |
13480 KB |
Output is correct |
6 |
Correct |
85 ms |
13600 KB |
Output is correct |
7 |
Correct |
93 ms |
12272 KB |
Output is correct |
8 |
Correct |
104 ms |
17100 KB |
Output is correct |
9 |
Correct |
101 ms |
16712 KB |
Output is correct |
10 |
Correct |
129 ms |
16384 KB |
Output is correct |
11 |
Correct |
129 ms |
16328 KB |
Output is correct |
12 |
Correct |
134 ms |
14724 KB |
Output is correct |
13 |
Correct |
130 ms |
20768 KB |
Output is correct |
14 |
Correct |
79 ms |
12372 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
116 ms |
16856 KB |
Output is correct |
2 |
Correct |
157 ms |
14756 KB |
Output is correct |
3 |
Correct |
95 ms |
20608 KB |
Output is correct |
4 |
Correct |
117 ms |
16764 KB |
Output is correct |
5 |
Correct |
123 ms |
16352 KB |
Output is correct |
6 |
Correct |
113 ms |
16272 KB |
Output is correct |
7 |
Correct |
128 ms |
14760 KB |
Output is correct |
8 |
Correct |
89 ms |
20628 KB |
Output is correct |
9 |
Correct |
53 ms |
12392 KB |
Output is correct |