题意
有 \(n\) 个人在银行里排队等待工作人员叫号。接下来有 \(q\) 个事件,事件的类型分为 \(3\) 种。
-
1
工作人员叫一个当前未被叫号的人过来。 -
2 x
代表编号为 \(x\) 的人来了(保证 \(x\) 至少被叫号一次)。 -
3
重复呼叫没有来的人当中编号最小的,并要求输出其编号。
思路
依据题意模拟。使用一个数组,记录每个人是否来过,以及没来过的人的最小编号。对于每个操作 \(2\),更新状态以及没来过的人的最小编号,在操作 \(3\) 时直接输出答案即可。
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
int n,m,k,a,cnt = 1,pd[1000001];
int main()
{
cin >> n >> m;
for( int i = 1 ; i <= m && cnt <= n; i ++ )
{
cin >> k;
if( k == 2 )
{
cin >> a;
pd[a] = 1;
for( ; cnt <= n && pd[cnt] ; cnt ++ );
}
if( k == 3 )
cout << cnt << endl;
}
return 0;
}
标签:cnt,题意,int,编号,include,abc294
From: https://www.cnblogs.com/-lilong-/p/17976893