#include<bits/stdc++.h>
#define ll int
#define ff first
#define ss second
using namespace std;
ll n,q,i,p[100005],sz[100005],root,x,y,u[100005],a[100005];
bitset<100005> vis;
vector<pair<ll,ll>> v[100005];
vector<ll> w[100005],t[100005];
pair<ll,ll> loc[100005];
void dfs(ll x){
for(ll i:t[x]){
dfs(i);
a[x]=min(a[i],a[x]);
}
}
ll update(ll x){
ll idx=0;
for(pair<ll,ll> i:v[x]){
if(sz[i.ss]<w[i.ss].size()){
idx=i.ss;
break;
}
}
if(idx!=0) return update(idx);
else{
sz[x]++;
return w[x][sz[x]-1];
}
}
ll roll(ll x){
ll y=loc[x].ff,z=loc[x].ss;
if(sz[y]<w[y].size() || sz[p[y]]==0){
sz[y]--;
return sz[y]-z+2;
}
return sz[y]-z+1+roll(p[y]);
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin >> n >> q;
for(i=1;i<=n;i++){
loc[i]={i,1};
w[i].push_back(i);
cin >> p[i];
a[i]=i;
u[p[i]]++;
}
for(i=1;i<=n;i++){
if(u[i]==0){
x=i;
while(p[x]!=0){
y=p[x];
if(vis[x]==1) break;
vis[x]=1;
if(u[y]==1){
p[x]=p[y];
p[y]=-1;
w[x].push_back(y);
loc[y]={x,w[x].size()};
a[x]=min(a[x],a[y]);
vis[x]=0;
}
else x=y;
}
}
}
for(i=1;i<=n;i++){
if(p[i]==-1) continue;
if(p[i]==0) root=i;
else t[p[i]].push_back(i);
}
dfs(root);
for(i=1;i<=n;i++){
if(p[i]!=-1 && p[i]!=0){
v[p[i]].push_back({a[i],i});
}
}
for(i=1;i<=n;i++){
sort(v[i].begin(),v[i].end());
}
while(q--){
cin >> x >> y;
if(x==1){
for(i=1;i<=y;i++)
x=update(root);
cout << x << "\n";
}
else{
cout << roll(y)-1 << "\n";
}
}
}
Compilation message
ballmachine.cpp: In function 'int update(int)':
ballmachine.cpp:20:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
20 | if(sz[i.ss]<w[i.ss].size()){
| ~~~~~~~~^~~~~~~~~~~~~~~
ballmachine.cpp: In function 'int roll(int)':
ballmachine.cpp:33:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
33 | if(sz[y]<w[y].size() || sz[p[y]]==0){
| ~~~~~^~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
8540 KB |
Output is correct |
2 |
Correct |
76 ms |
14516 KB |
Output is correct |
3 |
Correct |
38 ms |
14292 KB |
Output is correct |
4 |
Correct |
2 ms |
8540 KB |
Output is correct |
5 |
Correct |
2 ms |
8536 KB |
Output is correct |
6 |
Correct |
2 ms |
8792 KB |
Output is correct |
7 |
Correct |
3 ms |
8540 KB |
Output is correct |
8 |
Correct |
2 ms |
8540 KB |
Output is correct |
9 |
Correct |
6 ms |
9084 KB |
Output is correct |
10 |
Correct |
12 ms |
10164 KB |
Output is correct |
11 |
Correct |
66 ms |
14488 KB |
Output is correct |
12 |
Correct |
36 ms |
14384 KB |
Output is correct |
13 |
Correct |
53 ms |
14304 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
17 ms |
10328 KB |
Output is correct |
2 |
Execution timed out |
1026 ms |
16836 KB |
Time limit exceeded |
3 |
Correct |
43 ms |
14796 KB |
Output is correct |
4 |
Correct |
25 ms |
11100 KB |
Output is correct |
5 |
Execution timed out |
1076 ms |
11100 KB |
Time limit exceeded |
6 |
Execution timed out |
1030 ms |
11308 KB |
Time limit exceeded |
7 |
Execution timed out |
1068 ms |
11092 KB |
Time limit exceeded |
8 |
Correct |
16 ms |
10316 KB |
Output is correct |
9 |
Correct |
49 ms |
15660 KB |
Output is correct |
10 |
Execution timed out |
1055 ms |
16752 KB |
Time limit exceeded |
11 |
Execution timed out |
1030 ms |
16592 KB |
Time limit exceeded |
12 |
Execution timed out |
1056 ms |
15808 KB |
Time limit exceeded |
13 |
Correct |
30 ms |
13772 KB |
Output is correct |
14 |
Correct |
37 ms |
14676 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
24 ms |
12124 KB |
Output is correct |
2 |
Execution timed out |
1081 ms |
16048 KB |
Time limit exceeded |
3 |
Correct |
22 ms |
13276 KB |
Output is correct |
4 |
Correct |
32 ms |
14196 KB |
Output is correct |
5 |
Execution timed out |
1048 ms |
15196 KB |
Time limit exceeded |
6 |
Execution timed out |
1036 ms |
15036 KB |
Time limit exceeded |
7 |
Execution timed out |
1028 ms |
14748 KB |
Time limit exceeded |
8 |
Correct |
23 ms |
13276 KB |
Output is correct |
9 |
Correct |
48 ms |
15568 KB |
Output is correct |
10 |
Execution timed out |
1072 ms |
16848 KB |
Time limit exceeded |
11 |
Execution timed out |
1091 ms |
16476 KB |
Time limit exceeded |
12 |
Execution timed out |
1022 ms |
15952 KB |
Time limit exceeded |
13 |
Correct |
32 ms |
14796 KB |
Output is correct |
14 |
Execution timed out |
1056 ms |
14548 KB |
Time limit exceeded |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
46 ms |
15820 KB |
Output is correct |
2 |
Execution timed out |
1057 ms |
15888 KB |
Time limit exceeded |
3 |
Correct |
31 ms |
14284 KB |
Output is correct |
4 |
Correct |
45 ms |
15820 KB |
Output is correct |
5 |
Execution timed out |
1006 ms |
16804 KB |
Time limit exceeded |
6 |
Execution timed out |
1041 ms |
16984 KB |
Time limit exceeded |
7 |
Execution timed out |
1032 ms |
16056 KB |
Time limit exceeded |
8 |
Correct |
31 ms |
14416 KB |
Output is correct |
9 |
Correct |
36 ms |
14792 KB |
Output is correct |