题目介绍
题意:给出老鼠权值,下一行为出场顺序,按顺序每m个老鼠一组,每组一个胜者
最后输出老鼠对应的名次
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
const int N = 1e4+4;
int w[N];
pair<int,int>dep[N];
int val[N];
//给出的老鼠顺序 和比较顺序
bool cmp(pair<int,int > a,pair<int,int > b){
return a.first>b.first;
}
int main(){
int n,m;queue<int>take,left;
cin>>n>>m;
for(int i=0;i<n;++i)cin>>w[i];
int ind;
for(int i=0;i<n;++i){
cin>>ind;
left.push(ind);
dep[i].second = i;
}
int cnt =0;
while(left.size()>1){
while(take.size()){
int x= take.front();
take.pop();
dep[x].first = cnt;
}
while(left.size()){
int x,ans;
ans =-1;
for(int i=0;i<m;++i){
if(left.size()==0)break;
x=left.front();
left.pop();
if(ans==-1 || w[ans]<w[x])ans=x;
}
take.push(ans);
}
left = take;
cnt++;
}
dep[left.front()].first = cnt;
int num = 1,Rank=1;
sort(dep,dep+n,cmp);
val[dep[0].second] = 1;
for(int i = 1;i<n;++i){
if(dep[i].first!=dep[i-1].first){
Rank =i+1;
val[dep[i].second] = Rank;
}
else val[dep[i].second] = Rank;
}
for(int i=0;i<n;++i)printf("%d%c",val[i],i==n-1?'\n':' ');
return 0;
}