AT_abc294_d

题意

\(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;
}
posted @ 2024-01-20 18:05  liyilang2021  阅读(1)  评论(0编辑  收藏  举报