#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;
struct mknode{
int pri;
bool mark;
mknode(int pri,bool mark):pri(pri),mark(mark){}
};
int main(){
//freopen("input.txt","r",stdin);
int t;
cin>>t;
while(t--){
queue<mknode> q;
map<int,int> pri_cnt;
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
int pri;
cin>>pri;
if(pri_cnt.count(pri)==0){
pri_cnt[pri]=1;
}else{
pri_cnt[pri]++;
}
q.push(mknode(pri,i==m));
}
int time=0;
while(true){
struct mknode node = q.front();
bool isContinue=false;
for(map<int,int>::iterator it=pri_cnt.begin();it!=pri_cnt.end();it++){
if(it->first>node.pri){
q.pop();
q.push(node);
isContinue=true;
break;
}
}
if(isContinue) continue;
if(node.mark){
cout<<++time<<endl;
break;
}
q.pop();
++time;
pri_cnt[node.pri]-=1;
if(pri_cnt[node.pri]==0){
pri_cnt.erase(node.pri);
}
}
}
}
- 队列没有迭代器,无法对
queue
进行遍历。
- 使用构造函数创建一个结构体类型的变量
struct mknode node = mknode(pri, i == m)
,首先先是左边的声明,然后是右边的调用构造函数。
-
map
中删除一个键,使用erase
。