Submission #140020

#TimeUsernameProblemLanguageResultExecution timeMemory
140020rzbtBall Machine (BOI13_ballmachine)C++14
100 / 100
350 ms32356 KiB
#include <bits/stdc++.h> #define mp make_pair #define pb push_back #define F first #define S second #define all(x) x.begin(),x.end() #define MAXN 100005 typedef long long ll; using namespace std; int n,q; vector<int> niz[MAXN]; int seg[4*MAXN],org[MAXN]; int koren; int ulaz[MAXN],izlaz[MAXN]; int zaovo[MAXN]; int prioritet[MAXN],OP[MAXN]; int predak[MAXN][21]; int dubina[MAXN]; int vreme=0; set<int> svi; bool zauzet[MAXN]; void dfs(int t){ vreme++; ulaz[t]=vreme; org[vreme]=t; for(auto x:niz[t]){ dfs(x); } izlaz[t]=vreme; } void izgradi(int l,int d,int k){ if(l==d)seg[k]=org[l]; else{ int mid=(l+d)/2; izgradi(l,mid,k+k); izgradi(mid+1,d,k+k+1); seg[k]=min(seg[k+k],seg[k+k+1]); } } int dobij(int l,int d,int tl,int td,int k){ if(l>=tl && d<=td)return seg[k]; if(l>td || d<tl)return n+1; int mid=(l+d)/2; return min(dobij(l,mid,tl,td,k+k),dobij(mid+1,d,tl,td,k+k+1)); } bool cmp(int a,int b){ return zaovo[a]<zaovo[b]; } void dfs2(int t,int h){ dubina[t]=h; org[vreme]=t; sort(all(niz[t]),cmp); for(auto x:niz[t]){ dfs2(x,h+1); } vreme++; prioritet[vreme]=t; OP[t]=vreme; } int main() { scanf("%d %d", &n, &q); for(int i=1;i<=n;i++){ svi.insert(i); int t; scanf("%d", &t); predak[i][0]=t; if(t==0)koren=i; else niz[t].pb(i); } dfs(koren); izgradi(1,n,1); vreme=0; for(int i=1;i<=n;i++)zaovo[i]=dobij(1,n,ulaz[i],izlaz[i],1); dfs2(koren,0); //for(int i=1;i<=n;i++)printf("%d ",prioritet[i]); for(int j=1;j<21;j++){ for(int i=1;i<=n;i++){ predak[i][j]=predak[predak[i][j-1]][j-1]; } } ////////////////////// while(q--){ int qt,k; scanf("%d %d", &qt, &k); if(qt==1){ while(k--){ zauzet[prioritet[*(svi.begin())]]=true; if(k==0)printf("%d\n",prioritet[*(svi.begin())]); svi.erase(svi.begin()); } }else{ int od=dubina[k]; for(int j=20;j>=0;j--){ if(zauzet[predak[k][j]])k=predak[k][j]; } printf("%d\n",od-dubina[k]); svi.insert(OP[k]); zauzet[k]=false; } } return 0; }

Compilation message (stderr)

ballmachine.cpp: In function 'int main()':
ballmachine.cpp:72:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &n, &q);
     ~~~~~^~~~~~~~~~~~~~~~~
ballmachine.cpp:76:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d", &t);
         ~~~~~^~~~~~~~~~
ballmachine.cpp:98:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d", &qt, &k);
         ~~~~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...