【数据结构 | C++】不知道取什么好

一个长度为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值