CF2011I.Stack and Queue
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
两名医生的门口排着两队病人。第一位医生按照通常的排队顺序看病人——谁先到,谁就先看。第二位医生做了相反的事情——他先给最后到达的人看病。因此,有第一位医生的队列和第二位医生的堆栈。患者既可以在队列中,也可以在堆栈中。每位患者的特征是他们去看医生的时间(两位医生的时间相同)。
预约开始时,医生将分别按照排队和堆叠的顺序看病人。医生一做完一个病人,就会给下一个病人打电话。
但有一个问题:如果一个病人同时在队列和堆栈中,他先被叫到一个医生那里,然后被叫到另一个医生那儿,而他还没有完成第一个医生的工作,就会出现混乱。允许患者在与第一位医生交谈结束的那一刻去看第二位医生。
如果医生能够看到所有患者而不会产生任何混淆,那么队列和堆栈的当前配置就被称为良好。
最初,队列和堆栈都是空的。有三种类型的查询:
- 将患者x添加到队列中;
2.将患者x添加到堆栈中;
3.排队的病人x意识到自己走错了地方,于是移到了队列中;
然而,他移动到堆栈中的位置,就像他在进入队列时进入堆栈一样。
保证每次查询后,每个患者在队列中不超过一次,在堆栈中不超过1次。
每次查询后,您都需要确定当前配置是否良好。
输入格式
第一行包含一个整数n(1≤n≤105)--请求的数量。
第二行包含n个整数 a1,a2,...an(1≤ai≤109)--对于每位患者,他们去看医生的时间。
以下n行中的每一行都包含两个整数t和x(1≤t≤3;1≤x≤n)——查询类型和患者索引。
如果查询类型为1,则患者x尚未在队列中;
如果查询类型为2,则患者x还不在堆栈中;
如果查询类型为3,则患者x已经在队列中,还没有在堆栈中。
输出格式
每次查询后,如果当前配置良好,则打印“YES”,否则打印“NO”。
输入输出样例
输入#1
3 10 15 4 1 1 2 1 2 2
输出#1
YES NO YES
输入#2
7 2 5 1 5 5 4 8 1 1 2 5 1 2 2 3 3 2 1 2 3 1
输出#2
YES YES YES YES YES NO NO
输入解题思路,AI测评打分。不知道怎么写?