★实验任务 有一个长度为 n 的序列,第 i 个数的大小为 a[i]。现在从第 1 个数开始从左 往右进行以下操作: 1. 如果当前数是剩下的数中最大的,则输出并删去这个数。 2. 若不是,将它放到序列的末尾。 现在,bg 想知道一开始的第 m(从 1 开始计数)个数第几次被输出。
★数据输入
第一行输入两个正整数 n(0< n <=1000)、m(1=< m<=n)。 接下去一行有 n 个正整数,第 i 个数表示 a[i]的值。
★数据输出 输出一个数,表示第 m 个数第几次被输出。
输入示例
5 2
1 2 3 4 5
输出示例
4
输入示例
6 1
2 2 8 2 2 2
输入示例
5
简单的队列应用
/*
* buzhidao.cpp
*
* Created on: 2016年9月30日
* Author: 221500423 CJDM66
*/
#include<iostream>
#include<queue>
#include<algorithm>
#define MAX 1001
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(void){
queue<int*> que;
queue<int> maxq;
int a[MAX];
int b[MAX];
int i,n,m,count=0;
cin>>n>>m;
m--;
for(i=0;i<n;i++){
cin>>a[i];
b[i]=a[i];
que.push(&a[i]);
}
int *p=&a[m];
sort(b,b+n,cmp);
for(i=0;i<n;i++){
maxq.push(b[i]);
}
while(1){
if(*que.front() == maxq.front()){
count++;
maxq.pop();
if(que.front() == p) break;
que.pop();
}
else{
que.push(que.front());
que.pop();
}
}
cout<<count;
return 0;
}