Submission #787256

#TimeUsernameProblemLanguageResultExecution timeMemory
787256trucmaiBall Machine (BOI13_ballmachine)C++17
100 / 100
144 ms54892 KiB
//i_love_aisukiuwu #include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "/home/trucmai/.vim/tools.h" #define debug(x...) cerr << "\e[91m"<<__func__<<":"<<__LINE__<<" [" << #x << "] = ["; _print(x); cerr << "\e[39m" << endl; #else #define debug(x...) #endif void open(){ if(fopen("i.inp","r")){ freopen("i.inp","r",stdin); freopen("o.out","w",stdout); } } #define ll long long #define all(a) (a).begin(), (a).end() #define vi vector<ll> #define pi pair<ll,ll> #define pii pair<ll,pair<ll,ll>> #define fi first #define se second #define gcd __gcd #define mset(a,v) memset(a, v, sizeof(a)) #define endl '\n' #define spc " " const int MN1 = 1e6 + 5,MN2 = 1e4 + 5,LOG = 20; const ll MOD = 1e9 + 7,INF = 1e9; ll n,q; ll mx[MN1],h[MN1],tin[MN1]; ll up[MN1][LOG]; bool col[MN1]; vector<ll>adj[MN1]; priority_queue<pi,vector<pi>,greater<pi>>pq; void dfs(ll u){ mx[u] = u; for(ll v : adj[u]){ h[v] = h[u] + 1; up[v][0] = u; dfs(v); mx[u] = min(mx[u],mx[v]); } } ll timer = 0; void dfs2(ll u){ for(ll v : adj[u]) dfs2(v); tin[u] = ++timer; } void solve(){ cin>>n>>q; for(ll i = 1,p;i <= n;++i){ cin>>p; adj[p].push_back(i); } dfs(0); for(ll i = 1;i < LOG;++i) for(ll j = 1;j <= n;++j) up[j][i] = up[up[j][i-1]][i-1]; for(ll i = 1;i <= n;++i) sort(all(adj[i]),[&](ll x,ll y){return mx[x] < mx[y];}); dfs2(0); for(ll i = 1;i <= n;++i){ // cout<<"DEBUG: "<<i<<spc<<tin[i]<<endl; pq.push({tin[i],i}); } while(q--){ ll t,u; cin>>t>>u; if(t == 1){ ll ptr = 0; while(u--){ ptr = pq.top().se; pq.pop(); //cout<<"DEBUG: "<<ptr<<endl; col[ptr] = true; } cout<<ptr<<endl; } else{ ll v = u; for(ll i = LOG-1;i >= 0;--i) if(col[up[v][i]]) v = up[v][i]; col[v] = false; pq.push({tin[v],v}); cout<<h[u] - h[v]<<endl; } } } signed main(){ cin.tie(0) -> sync_with_stdio(0); open(); ll t = 1; //cin>>t; while(t--) solve(); //cerr << endl << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n"; }

Compilation message (stderr)

ballmachine.cpp: In function 'void open()':
ballmachine.cpp:14:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |     freopen("i.inp","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~
ballmachine.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     freopen("o.out","w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...