#include<bits/stdc++.h>
using namespace std;
#define N 100005
int t[4*N],lazy[4*N];
int root,bp[20][N],h[N],st[N],en[N],sub_sz[N],sub_mi[N],prior[N],sz,p,ll,rr,val;
vector<int> g[N];
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
void push(int x){
if(lazy[x]){
t[x*2]=t[x*2+1]=lazy[x*2]=lazy[x*2+1]=lazy[x];
lazy[x]=0;
}
}
void update(int x,int l,int r){
if(r<ll||rr<l)return ;
if(ll<=l&&r<=rr){
t[x]=val;
lazy[x]=val;
return ;
}
push(x);
int mid=(l+r)/2;
update(x*2,l,mid);
update(x*2+1,mid+1,r);
}
int sol(int x,int l,int r){
if(r<ll||rr<l)return -1;
if(ll<=l&&r<=rr)return t[x];
push(x);
int mid=(l+r)/2;
return max(sol(x*2,l,mid),sol(x*2+1,mid+1,r));
}
void dfs(int s,int f){
bp[0][s]=f;
st[s]=en[s]=++sz;
sub_sz[s]=1;
sub_mi[s]=s;
h[s]=h[f]+1;
for(auto x:g[s]){
dfs(x,s);
en[s]=en[x];
sub_mi[s]=min(sub_mi[s],sub_mi[x]);
sub_sz[s]+=sub_sz[x];
}
}
void up_pri(int s){
vector<pair<int,int>> temp;
for(auto x:g[s])temp.push_back({sub_mi[x],x});
sort(temp.begin(),temp.end());
for(auto x:temp){
up_pri(x.second);
}
prior[s]=++p;
}
int main(){
int n,m,i,j,op,k,x;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&k);
g[k].push_back(i);
if(k==0)root=i;
}
dfs(root,0);
up_pri(root);
for(i=1;i<=n;i++)q.push({prior[i],i});
for(i=1;i<20;i++)for(j=1;j<=n;j++)bp[i][j]=bp[i-1][bp[i-1][j]];
while(m--){
scanf("%d %d",&op,&k);
if(op==1){
while(k--){
x=q.top().second;
q.pop();
ll=st[x],rr=en[x];
val=h[x];
update(1,1,n);
}
printf("%d\n",x);
}
else{
ll=rr=st[k];
val=sol(1,1,n);
printf("%d\n",h[k]-val);
if(h[k]!=val){
for(i=19;i>=0;i--)if(h[bp[i][k]]>val)k=bp[i][k];
k=bp[0][k];
}
q.push({prior[k],k});
ll=st[k],rr=en[k];
val=h[k]+1;
update(1,1,n);
ll=st[k],rr=st[k];
val=0;
update(1,1,n);
}
}
return 0;
}
Compilation message
ballmachine.cpp: In function 'int main()':
ballmachine.cpp:64:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
64 | scanf("%d %d",&n,&m);
| ~~~~~^~~~~~~~~~~~~~~
ballmachine.cpp:66:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
66 | scanf("%d",&k);
| ~~~~~^~~~~~~~~
ballmachine.cpp:75:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
75 | scanf("%d %d",&op,&k);
| ~~~~~^~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
2764 KB |
Output is correct |
2 |
Correct |
205 ms |
13212 KB |
Output is correct |
3 |
Correct |
72 ms |
12368 KB |
Output is correct |
4 |
Correct |
2 ms |
2764 KB |
Output is correct |
5 |
Correct |
3 ms |
2780 KB |
Output is correct |
6 |
Correct |
3 ms |
2912 KB |
Output is correct |
7 |
Correct |
4 ms |
2892 KB |
Output is correct |
8 |
Correct |
3 ms |
2912 KB |
Output is correct |
9 |
Correct |
11 ms |
3436 KB |
Output is correct |
10 |
Correct |
32 ms |
5452 KB |
Output is correct |
11 |
Correct |
204 ms |
13240 KB |
Output is correct |
12 |
Correct |
69 ms |
12356 KB |
Output is correct |
13 |
Correct |
178 ms |
12508 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
49 ms |
8668 KB |
Output is correct |
2 |
Correct |
172 ms |
25540 KB |
Output is correct |
3 |
Correct |
80 ms |
16236 KB |
Output is correct |
4 |
Correct |
93 ms |
10264 KB |
Output is correct |
5 |
Correct |
93 ms |
10164 KB |
Output is correct |
6 |
Correct |
90 ms |
9828 KB |
Output is correct |
7 |
Correct |
109 ms |
8560 KB |
Output is correct |
8 |
Correct |
47 ms |
8452 KB |
Output is correct |
9 |
Correct |
167 ms |
25788 KB |
Output is correct |
10 |
Correct |
173 ms |
25540 KB |
Output is correct |
11 |
Correct |
196 ms |
24568 KB |
Output is correct |
12 |
Correct |
179 ms |
21416 KB |
Output is correct |
13 |
Correct |
107 ms |
28356 KB |
Output is correct |
14 |
Correct |
80 ms |
16180 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
114 ms |
14812 KB |
Output is correct |
2 |
Correct |
291 ms |
22852 KB |
Output is correct |
3 |
Correct |
169 ms |
27408 KB |
Output is correct |
4 |
Correct |
175 ms |
21956 KB |
Output is correct |
5 |
Correct |
152 ms |
21572 KB |
Output is correct |
6 |
Correct |
149 ms |
21488 KB |
Output is correct |
7 |
Correct |
178 ms |
18708 KB |
Output is correct |
8 |
Correct |
186 ms |
27420 KB |
Output is correct |
9 |
Correct |
284 ms |
26772 KB |
Output is correct |
10 |
Correct |
262 ms |
26404 KB |
Output is correct |
11 |
Correct |
265 ms |
26436 KB |
Output is correct |
12 |
Correct |
277 ms |
22864 KB |
Output is correct |
13 |
Correct |
301 ms |
33872 KB |
Output is correct |
14 |
Correct |
202 ms |
18516 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
300 ms |
26052 KB |
Output is correct |
2 |
Correct |
286 ms |
22344 KB |
Output is correct |
3 |
Correct |
120 ms |
31632 KB |
Output is correct |
4 |
Correct |
344 ms |
26000 KB |
Output is correct |
5 |
Correct |
288 ms |
25704 KB |
Output is correct |
6 |
Correct |
252 ms |
24448 KB |
Output is correct |
7 |
Correct |
252 ms |
22388 KB |
Output is correct |
8 |
Correct |
126 ms |
31556 KB |
Output is correct |
9 |
Correct |
85 ms |
16216 KB |
Output is correct |