简单的排队问题,用一个数组表示优先级,然后排队,每次把第一个的优先级遍历一遍,出队的就降低到最低优先级,不影响继续运行就可。
#include <iostream>
#include <queue>
using namespace std;
queue<int> q,em;
int t=0;
int q_pop(int *a,int n){
while(1){
int dig=q.front();q.pop();
int M=a[dig];
for(int i = 0;i < n;i++){
M=a[i]>M ? a[i]:M ;
}
if(M>a[dig]) { q.push(dig); }
else{
a[dig]=-10;
++t;
return dig;
}
}
}
int main(){
int T;
cin>>T;
while(T--){
q=em;
t=0;
int n,m;
cin>>n>>m;
int a[n],x;
for(int i = 0 ; i < n ; i ++){
cin>>a[i];
q.push(i);
}
while(q_pop(a,n)!=m);
cout<<t<<endl;
}
return 0;
}