#include <stdio.h>
#include <malloc.h>
int FindMaxi(int record[],int a[],int begin,int end)
{
int max=record[a[begin]],i=a[begin];
while(begin<end)
{
if(record[a[begin]]>max)
{
max=record[a[begin]];
i=a[begin];
}
++begin;
}
return i;
}
int main()
{
int n,m,i,record[1001],rank[1001];
scanf("%d %d",&n,&m);
int *a=(int*)malloc(n*sizeof(int));
for(i=0;i<n;++i)
scanf("%d",&record[i]);
for(i=0;i<n;++i)
scanf("%d",&a[i]);
int curscale=n,nextscale;
while(curscale>1)
{
if(curscale%m)
nextscale=curscale/m+1;
else
nextscale=curscale/m;
int begin=0,end,j=0,*ta=(int*)malloc(nextscale*sizeof(int));
while(begin<curscale)
{
if(curscale-begin>=m)
end=begin+m;
else
end=curscale;
i=FindMaxi(record,a,begin,end);
ta[j++]=i;
int k;
for(k=begin;k<end;++k)
if(a[k]!=i)rank[a[k]]=nextscale+1;
begin=end;
}
free(a);
a=ta;
curscale=nextscale;
}
rank[a[0]]=1;
for(i=0;i<n;++i)
{
printf("%d",rank[i]);
if(i!=n-1)printf(" ");
}
return 0;
}
转载于:https://www.cnblogs.com/xLester/p/7570436.html