结构体队列
2026-05-18 22:54:49
发布于:北京
6阅读
0回复
0点赞
一楼的pair看不懂的话来看二楼!!!
首先建一个队列结构体
struct node {
int s ;
int id ;
};
queue<node> q;
其次输入时我这边m加了个1,方便后面循环,其实根本没用
然后输入a[i],加入队列里,然后排序为后面循环做准备
for(int i = 1 ; i <= n ; i++) {
cin >> a[i] ;
q.push({a[i] , i}) ;
}
sort(a + 1 , a + 1 + n) ;
int op = n//为现在最大值的下标
int ans = 0//答案
然后做循环,若编号和m一样且现在是最大值,就break,否则判断他是不是最大值,若不是,放到后面去,若是,把他删了,op减一,ans加一;
while(q.front().id != m || q.front().s != a[op]) {
if(q.front().s != a[op]) {
q.push(q.front()) ;
q.pop() ;
}
else {
q.pop() ;
op-- ;
ans++ ;
}
}
最后答案别忘加1!!!
下面是完整版
#include <bits/stdc++.h>
using namespace std ;
const int N = 1e4 ;
int a[N] ;
struct node {
int s ;
int id ;
};
int main () {
queue<node> q;
int n , m ;
cin >> n >> m ;
m += 1 ;
for(int i = 1 ; i <= n ; i++) {
cin >> a[i] ;
q.push({a[i] , i}) ;
}
sort(a + 1 , a + 1 + n) ;
int op = n ;
int ans = 0 ;
while(q.front().id != m || q.front().s != a[op]) {
if(q.front().s != a[op]) {
q.push(q.front()) ;
q.pop() ;
}
else {
q.pop() ;
op-- ;
ans++ ;
}
}
cout << ans + 1;
}
全部评论 1
还不点赞?!?!
1周前 来自 北京
0




有帮助,赞一个