一个长度为n的序列,第i个数的大小为a[i]。现从第1个数开始从左往右进行以下操作:如果当前数是剩下的数中最大的,则删去并删去这个数;若不是,将它放到序列的末尾。请问:一开始的第m(从1开始计数)个数第几次被输出。
输入格式:第一行输入两个正整数 n、m;第二行有 n 个正整数,第 i 个数表示 a[i]的值。输出格式:输出一个数,表示第 m 个数第几次被输出。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;cin>>n>>m;int a[10005];
deque<pair<int,int>> q;//队列
for(int i=0;i<n;i++){
cin>>a[i];
q.push_back({a[i],i+1});
}
sort(a,a+n);int count=0;//得到最大值
while(true){
if(q.front().first!=a[n-1]){//队首与最大值比较
auto t=q.front();//不是最大值 则切到队尾
q.pop_front();
q.push_back(t);
}else{//如果队首是最大值,则判断是否为第m个数
if(q.front().second==m){
count++;cout<<count<<endl;break;
}else{//如果不是第m个数,count+1后删除
count++;q.pop_front();n--;
}
}
}return 0;
}
输入示例:5 2 \n 1 2 3 4 5
输出示例:4

被折叠的 条评论
为什么被折叠?



