#include <iostream>
#include <vector>
#include <set>
#include <iomanip>
#include <algorithm>
#include <functional>
#include <stdio.h>
#include <cmath>
#include <queue>
#include <string>
#include <map>
#include <complex>
#include <stack>
#include <set>
#include <fstream>
#define FOR(i,n) for(int i=0;i<n;i++)
#define FORE(i,a,b) for(int i=a;i<=b;i++)
#define ll long long int
#define vi vector<int>
#define ii pair<ll,ll>
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define pll pair<ll,ll>
#define cd complex<double>
const ll INF = 4e18;
using namespace std;
const int MAXN = 100005;
vi g[MAXN];
int sparseTable[20][MAXN];
int DPmin[MAXN];
int dpt[MAXN];
int parent[MAXN];
set<ii> s;
int status[MAXN];
void dfs1(int node,int p){
dpt[node] = ((p!=-1)?dpt[p]+1:0);
parent[node] = p;
vector<ii> all;
DPmin[node] = node;
for(auto e:g[node]){
if(e==p)continue;
dfs1(e,node);
all.pb({DPmin[e],e});
DPmin[node] = min(DPmin[node],DPmin[e]);
}
sort(all.begin(), all.end());
g[node].clear();
for(auto e:all)g[node].pb(e.ss);
g[node].pb(p);
}
int T = 0;
int __tm__[MAXN];
void dfs2(int node,int p){
for(auto e:g[node]){
if(e!=p)dfs2(e,node);
}
__tm__[node] = T;
s.insert({T++,node});
}
void buildSparseTable(int n){
FOR(i,n)sparseTable[0][i] = parent[i];
FORE(i,1,19){
FOR(node,n){
int p = sparseTable[i-1][node];
if(p == -1){
sparseTable[i][node] = -1;
}else{
sparseTable[i][node] = sparseTable[i-1][p];
}
}
}
}
inline int findFirstAncestor(int n,int a){
int k = 20;
while(k--){
int p = sparseTable[k][a];
if(p == -1 or status[p] == 0){
}else{
a=p;
}
}
return a;
}
int main(){
int n,q;
cin >> n >> q;
int root = 0;
FOR(i,n){
int a;
cin >> a;
a--;
if(a >= 0)g[a].pb(i);
else root = i;
}
dfs1(root,-1);
dfs2(root,-1);
buildSparseTable(n);
while(q--){
int t,a;
cin >> t >> a;
if(t == 1){
int last = 0;
FOR(i,a){
ii to = *s.begin();
s.erase(to);
status[to.ss] = 1;
last = to.ss+1;
}
cout << last << endl;
}else{
a--;
int p = findFirstAncestor(n,a);
s.insert({__tm__[p],p});
status[p] = 0;
cout << dpt[a]-dpt[p] << endl;
}
}
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
2816 KB |
Output is correct |
2 |
Correct |
504 ms |
15524 KB |
Output is correct |
3 |
Correct |
331 ms |
15608 KB |
Output is correct |
4 |
Correct |
4 ms |
2716 KB |
Output is correct |
5 |
Correct |
5 ms |
2816 KB |
Output is correct |
6 |
Correct |
6 ms |
2944 KB |
Output is correct |
7 |
Correct |
9 ms |
2944 KB |
Output is correct |
8 |
Correct |
9 ms |
2944 KB |
Output is correct |
9 |
Correct |
28 ms |
3584 KB |
Output is correct |
10 |
Correct |
95 ms |
5880 KB |
Output is correct |
11 |
Correct |
551 ms |
15472 KB |
Output is correct |
12 |
Correct |
353 ms |
15452 KB |
Output is correct |
13 |
Correct |
357 ms |
15480 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
210 ms |
9744 KB |
Output is correct |
2 |
Correct |
812 ms |
30840 KB |
Output is correct |
3 |
Correct |
378 ms |
21924 KB |
Output is correct |
4 |
Correct |
386 ms |
11384 KB |
Output is correct |
5 |
Correct |
460 ms |
11256 KB |
Output is correct |
6 |
Correct |
410 ms |
11372 KB |
Output is correct |
7 |
Correct |
405 ms |
9464 KB |
Output is correct |
8 |
Correct |
204 ms |
9592 KB |
Output is correct |
9 |
Correct |
755 ms |
30812 KB |
Output is correct |
10 |
Correct |
806 ms |
30968 KB |
Output is correct |
11 |
Correct |
702 ms |
30812 KB |
Output is correct |
12 |
Correct |
792 ms |
25884 KB |
Output is correct |
13 |
Correct |
431 ms |
34908 KB |
Output is correct |
14 |
Correct |
351 ms |
21980 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
298 ms |
16856 KB |
Output is correct |
2 |
Correct |
724 ms |
26568 KB |
Output is correct |
3 |
Correct |
391 ms |
32120 KB |
Output is correct |
4 |
Correct |
391 ms |
25476 KB |
Output is correct |
5 |
Correct |
427 ms |
25208 KB |
Output is correct |
6 |
Correct |
491 ms |
25348 KB |
Output is correct |
7 |
Correct |
460 ms |
22008 KB |
Output is correct |
8 |
Correct |
407 ms |
32368 KB |
Output is correct |
9 |
Correct |
698 ms |
31060 KB |
Output is correct |
10 |
Correct |
760 ms |
31020 KB |
Output is correct |
11 |
Correct |
791 ms |
30920 KB |
Output is correct |
12 |
Correct |
756 ms |
26756 KB |
Output is correct |
13 |
Correct |
693 ms |
39860 KB |
Output is correct |
14 |
Correct |
515 ms |
22540 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
718 ms |
31040 KB |
Output is correct |
2 |
Correct |
886 ms |
26748 KB |
Output is correct |
3 |
Correct |
442 ms |
39212 KB |
Output is correct |
4 |
Correct |
715 ms |
31080 KB |
Output is correct |
5 |
Correct |
742 ms |
30924 KB |
Output is correct |
6 |
Correct |
615 ms |
30840 KB |
Output is correct |
7 |
Correct |
685 ms |
26692 KB |
Output is correct |
8 |
Correct |
374 ms |
39160 KB |
Output is correct |
9 |
Correct |
367 ms |
22068 KB |
Output is correct |