Simple simulation.
#include <iostream>#include<cstring>#include<cmath>#include<algorithm>#include<cstdio>#include<map>#include<queue>#include<string>#include<stack>#include<vector>using namespacestd;Const intmaxn= ++Ten;structx{intVal; intID;} S[MAXN];intn,m;intANS[MAXN];intH[maxn],cnt;queue<x>q[2];intMain () {scanf ("%d%d",&n,&m); for(intI=1; i<=n;i++) scanf ("%d",&s[i].val); for(intI=1; i<=n;i++) s[i].id=i; for(intI=1; i<=n;i++) { intF scanf"%d", &f); f++; q[0].push (s[f]); } intnow=0; while(1) {memset (H,0,sizeofh); if(q[now].size () = =1) {Ans[q[now].front (). Id]=1; Break; } while(1) { if(Q[now].size () <=m) {X tmp; Tmp.val=-99999; while(!Q[now].empty ()) {H[q[now].front (). Id]=1; if(Q[now].front (). Val>tmp.val) tmp=Q[now].front (); Q[now].pop (); } H[tmp.id]=0; Q[now^1].push (TMP); Break; } Else{X tmp; Tmp.val=-99999; for(intI=0; i<m;i++) {H[q[now].front (). Id]=1; if(Q[now].front (). Val>tmp.val) tmp=Q[now].front (); Q[now].pop (); } H[tmp.id]=0; Q[now^1].push (TMP); }} now=now^1; for(intI=1; i<=n;i++) if(h[i]==1) Ans[i]=q[now].size () +1; } for(intI=1; i<=n;i++) {printf ("%d", Ans[i]); if(i<n) printf (" "); Elseprintf"\ n"); } return 0;}
PAT (Advanced level) 1056. Mice and Rice (25)