Submission #74670

#TimeUsernameProblemLanguageResultExecution timeMemory
74670kjain_1810Ball Machine (BOI13_ballmachine)C++17
100 / 100
430 ms107828 KiB
//RESET VALUES OF N TO AVOID RTE :/ #include<bits/stdc++.h> #define ind(a) scanf("%d", &a) #define inlld(a) scanf("%lld", &a) #define pb push_back #define f first #define s second #define ind2(a, b) scanf("%d%d", &a, &b) #define ind3(a, b, c) scanf("%d%d%d", &a, &b, &c) #define inlld2(a, b) scanf("%lld%lld", &a, &b) #define inlld3(a, b, c) scanf("%lld%lld%lld", &a, &b, &c) using namespace std; const int N=1e5+5; const int MOD=1e9+7; typedef long long ll; typedef long double ld; int power(int a,int b,int m = MOD){ if(b == 0) return 1; if(b == 1) return a; int x = power(a,b/2,m)%m; x = (x*x)%m; if(b%2) return (x*a)%m; return x; } ll n, q, mini[N], lcapar[N][30], order[N], arr[N]; ll height[N]; vector<ll>adj[N]; set<pair<ll, ll> >ss[N]; void dfs1(ll u, ll par, ll h) { ll anc=1, i=0; ll here=1e9; height[u]=h; while(anc<=h) { if(i==0) lcapar[u][i]=par; else lcapar[u][i]=lcapar[lcapar[u][i-1]][i-1]; anc*=2; i++; } for(auto v:adj[u]) { if(v==par) continue; dfs1(v, u, h+1); here=min(here, min(mini[v], v)); ss[u].insert({min(mini[v], v), v}); } mini[u]=here; } ll tim=1; void dfs2(ll u) { for(auto v:ss[u]) dfs2(v.s); order[u]=tim++; } set<pair<ll, ll> >finalset; int main() { ll root; inlld2(n, q); for(ll a=1; a<=n; a++) { ll p; inlld(p); if(!p) root=a; else { adj[a].pb(p); adj[p].pb(a); } } dfs1(root, 0, 0); dfs2(root); for(ll a=1; a<=n; a++) finalset.insert({order[a], a}); ll ptr=0; while(q--) { ll type, u; inlld2(type, u); if(type==1) { ll cnt=0, ans; for(auto it:finalset) { cnt++; arr[it.s]=1; ans=it.s; finalset.erase(it); if(cnt==u) break; } printf("%lld\n", ans); } else { ll tosub=height[u]; ll i=log2(height[u])+1; while(i>=0) { if(arr[lcapar[u][i]]==1) { u=lcapar[u][i]; } else i--; //check if correct } // printf("%lld ", u); if(u==0) printf("%lld\n", tosub+1); else printf("%lld\n", tosub-height[u]); arr[max((ll)1, u)]=0; finalset.insert({order[u], u}); } } return 0; } //RESET VALUES OF N TO AVOID RTE :/

Compilation message (stderr)

ballmachine.cpp: In function 'int main()':
ballmachine.cpp:84:5: warning: unused variable 'ptr' [-Wunused-variable]
  ll ptr=0;
     ^~~
ballmachine.cpp:10:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 #define inlld2(a, b) scanf("%lld%lld", &a, &b)
                      ~~~~~^~~~~~~~~~~~~~~~~~~~
ballmachine.cpp:67:2: note: in expansion of macro 'inlld2'
  inlld2(n, q);
  ^~~~~~
ballmachine.cpp:4:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 #define inlld(a) scanf("%lld", &a)
                  ~~~~~^~~~~~~~~~~~
ballmachine.cpp:71:3: note: in expansion of macro 'inlld'
   inlld(p);
   ^~~~~
ballmachine.cpp:10:27: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 #define inlld2(a, b) scanf("%lld%lld", &a, &b)
                      ~~~~~^~~~~~~~~~~~~~~~~~~~
ballmachine.cpp:88:3: note: in expansion of macro 'inlld2'
   inlld2(type, u);
   ^~~~~~
ballmachine.cpp:81:6: warning: 'root' may be used uninitialized in this function [-Wmaybe-uninitialized]
  dfs2(root);
  ~~~~^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...