#include<iostream>
#include<queue>
#include<math.h>
using namespace std;
struct mouse{
int weight;
int rk;
};
int main()
{
int np,ng; //n mice
cin>>np>>ng;
mouse mice[np];
for(int i=0;i<np;i++) scanf("%d",&mice[i].weight);
int order;
queue<int> q;
for(int i=0;i<np;i++){
scanf("%d",&order);
q.push(order);
}
int temp=np,group;
while(q.size()!=1){
if(temp%ng==0) group=temp/ng;
else group=temp/ng+1;
for(int i=0;i<group;i++){
int k=q.front();
for(int j=0;j<ng;j++){
if(i*ng+j>=temp) break;
int ft=q.front();
if(mice[ft].weight>mice[k].weight) k=ft;
mice[ft].rk=group+1;
q.pop();
}
q.push(k); //晋级
}
temp=group;
}
mice[q.front()].rk=1;
for(int i=0;i<np;i++){
printf("%d",mice[i].rk);
if(i!=np-1) printf(" ");
}
return 0;
}
我就一直想用priority_queue 和 pair 写,但是好像根本不好写,算了。。