根据题目需求,用队列进行模拟就好了。
代码如下:
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct task
{
int val,id;
};
int a[101],b[11],num[11];
queue<task> q;
bool cmp(int x,int y)
{
return x>y;
}
void unique()
{
int temp=a[0],i=0,j=0;;
while(a[i])
{
while(a[i]==temp)
i++;
b[j++]=temp;
temp=a[i];
}
/*for(int k=0;k<j;k++)
printf("%d ",b[k]);printf("\n");*/
}
int main()
{
int T,n,m,cnt;
cin>>T;
while(T--)
{
cnt=0;
cin>>n>>m;
task t;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(num,0,sizeof(num));
for(int i=0;i<=n-1;i++)
{
scanf("%d",&t.val);
t.id=i;
a[i]=t.val;
num[a[i]]++;
q.push(t);
}
sort(a,a+n,cmp);
unique();
int i=0;
while(b[i])
{
int temp=b[i];
t=q.front();
if(t.val<temp)
{
q.pop();
q.push(t);
}
else
{
cnt++;
num[b[i]]--;
if(!num[b[i]])
i++;
if(t.id==m)
break;
q.pop();
}
}
printf("%d\n",cnt);
while(!q.empty()) q.pop();
}
return 0;
}