#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx")
#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 |
9792 KB |
Output is correct |
3 |
Correct |
50 ms |
9980 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 |
3 ms |
2772 KB |
Output is correct |
9 |
Correct |
5 ms |
3076 KB |
Output is correct |
10 |
Correct |
13 ms |
4568 KB |
Output is correct |
11 |
Correct |
68 ms |
9772 KB |
Output is correct |
12 |
Correct |
48 ms |
9984 KB |
Output is correct |
13 |
Correct |
66 ms |
9720 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
32 ms |
6916 KB |
Output is correct |
2 |
Correct |
100 ms |
17368 KB |
Output is correct |
3 |
Correct |
62 ms |
12952 KB |
Output is correct |
4 |
Correct |
46 ms |
7672 KB |
Output is correct |
5 |
Correct |
46 ms |
7544 KB |
Output is correct |
6 |
Correct |
44 ms |
7552 KB |
Output is correct |
7 |
Correct |
46 ms |
6608 KB |
Output is correct |
8 |
Correct |
28 ms |
6952 KB |
Output is correct |
9 |
Correct |
95 ms |
17904 KB |
Output is correct |
10 |
Correct |
112 ms |
17508 KB |
Output is correct |
11 |
Correct |
111 ms |
17388 KB |
Output is correct |
12 |
Correct |
106 ms |
15156 KB |
Output is correct |
13 |
Correct |
80 ms |
20428 KB |
Output is correct |
14 |
Correct |
60 ms |
12912 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
47 ms |
10616 KB |
Output is correct |
2 |
Correct |
119 ms |
15560 KB |
Output is correct |
3 |
Correct |
96 ms |
18860 KB |
Output is correct |
4 |
Correct |
79 ms |
15056 KB |
Output is correct |
5 |
Correct |
87 ms |
14604 KB |
Output is correct |
6 |
Correct |
84 ms |
14644 KB |
Output is correct |
7 |
Correct |
66 ms |
13052 KB |
Output is correct |
8 |
Correct |
93 ms |
18896 KB |
Output is correct |
9 |
Correct |
120 ms |
17936 KB |
Output is correct |
10 |
Correct |
115 ms |
17560 KB |
Output is correct |
11 |
Correct |
113 ms |
17624 KB |
Output is correct |
12 |
Correct |
130 ms |
15624 KB |
Output is correct |
13 |
Correct |
141 ms |
22968 KB |
Output is correct |
14 |
Correct |
86 ms |
12984 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
128 ms |
18084 KB |
Output is correct |
2 |
Correct |
103 ms |
15540 KB |
Output is correct |
3 |
Correct |
92 ms |
22748 KB |
Output is correct |
4 |
Correct |
111 ms |
18216 KB |
Output is correct |
5 |
Correct |
115 ms |
17612 KB |
Output is correct |
6 |
Correct |
102 ms |
17484 KB |
Output is correct |
7 |
Correct |
117 ms |
15660 KB |
Output is correct |
8 |
Correct |
82 ms |
22732 KB |
Output is correct |
9 |
Correct |
56 ms |
13020 KB |
Output is correct |