P1160 队列安排——list
admin
2024-03-26 03:53:07
0

队列安排

题目描述

一个学校里老师要将班上 NNN 个同学排成一列,同学被编号为 1∼N1\sim N1∼N,他采取如下的方法:

  1. 先将 111 号同学安排进队列,这时队列中只有他一个人;

  2. 2−N2-N2−N 号同学依次入列,编号为 iii 的同学入列方式为:老师指定编号为 iii 的同学站在编号为 1∼(i−1)1\sim(i-1)1∼(i−1) 中某位同学(即之前已经入列的同学)的左边或右边;

  3. 从队列中去掉 M(M

在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号。

输入格式

第 111 行为一个正整数 NNN,表示了有 NNN 个同学。

第 2∼N2\sim N2∼N行,第 iii 行包含两个整数 k,pk,pk,p,其中 kkk 为小于 iii 的正整数,ppp 为 000 或者 111。若 ppp 为$ 0$,则表示将 iii 号同学插入到 kkk 号同学的左边,ppp 为 111 则表示插入到右边。

第 N+1N+1N+1 行为一个正整数 MMM,表示去掉的同学数目。

接下来 MMM 行,每行一个正整数 xxx,表示将 xxx 号同学从队列中移去,如果 xxx 号同学已经不在队列中则忽略这一条指令。

输出格式

111 行,包含最多 NNN 个空格隔开的正整数,表示了队列从左到右所有同学的编号,行末换行且无空格。

样例 #1

样例输入 #1

4
1 0
2 1
1 0
2
3
3

样例输出 #1

2 4 1

提示

样例解释:

将同学 222 插入至同学 111 左边,此时队列为:

2 1

将同学 333 插入至同学 222 右边,此时队列为:

2 3 1

将同学 444 插入至同学 111 左边,此时队列为:

2 3 4 1

将同学 333 从队列中移出,此时队列为:

2 4 1

同学 333 已经不在队列中,忽略最后一条指令

最终队列:

2 4 1

数据范围

对于 20%20\%20% 的数据,有 1≤N≤101\leq N\leq 101≤N≤10;

对于 40%40\%40% 的数据,有 1≤N≤10001\leq N\leq 10001≤N≤1000;

对于 100%100\%100% 的数据,有 1≤N,M≤1000001\leq N,M\leq1000001≤N,M≤100000。

分析

  1. list就是双向链表,插入删除的操作都很快,一开始用的vector,发现中间插入会出现差错,换的list;
  2. 用一个list迭代器存储每个人的迭代器值,这样O(1)的访问复杂度;
  3. next(pos[k])就是获取x的下一个迭代器,用来插右边用;
  4. 删除元素不用真的删除,不然耗时大,数组标记,逻辑删除即可;
  5. 遍历list可以采用增强for即可
#includeusing namespace std;list l;
list::iterator pos[100010];
int rem[100010];
int n, m, k, p, x;int main() {cin >> n;l.push_back(1);pos[1] = l.begin();for (int i = 2; i <= n; ++i) {cin >> k >> p;if (p == 0) {//插左边pos[i] = l.insert(pos[k], i);} else {//插右边pos[i] = l.insert(next(pos[k]), i);}}cin >> m;while (m--) {cin >> x;rem[x] = 1;}for (int x: l) {if (!rem[x])cout << x << " ";}return 0;
}

相关内容

热门资讯

安卓系统的如何测试软件,从入门... 你有没有想过,你的安卓手机里那些神奇的软件是怎么诞生的呢?它们可不是凭空出现的,而是经过一系列严格的...
小米8安卓系统版本,安卓系统版... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,小米8这款手机自从上市以来,就凭借着出色...
华为手机安卓系统7以上,创新体... 你有没有发现,最近华为手机越来越受欢迎了呢?尤其是那些搭载了安卓系统7.0及以上版本的机型,简直让人...
儿童英语免费安卓系统,儿童英语... 哇,亲爱的家长朋友们,你是否在为孩子的英语学习发愁呢?别担心,今天我要给你带来一个超级好消息——儿童...
ios系统切换安卓系统还原,还... 你有没有想过,有一天你的手机从iOS系统切换到了安卓系统,然后再从安卓系统回到iOS系统呢?这听起来...
灵焕3装安卓系统,引领智能新体... 你知道吗?最近手机圈里可是掀起了一股热潮,那就是灵焕3这款神器的安卓系统升级。没错,就是那个曾经以独...
安卓系统指南针软件,探索未知世... 手机里的指南针功能是不是让你在户外探险时倍感神奇?但你知道吗,安卓系统中的指南针软件可是大有学问呢!...
华为是不用安卓系统了吗,迈向自... 最近有个大新闻在科技圈里炸开了锅,那就是华为是不是不再使用安卓系统了?这可不是一个简单的问题,它涉及...
安卓系统热点开启失败,排查与解... 最近是不是你也遇到了安卓系统热点开启失败的小麻烦?别急,让我来给你详细说说这个让人头疼的问题,说不定...
小米max2系统安卓,安卓系统... 你有没有听说过小米Max2这款手机?它那超大的屏幕,简直就像是个移动的电脑屏幕,看视频、玩游戏,那叫...
电池健康怎么保持安卓系统,优化... 手机可是我们生活中不可或缺的好伙伴,而电池健康度就是它的生命力。你有没有发现,随着使用时间的增长,你...
安卓手机怎么调系统颜色,安卓手... 你有没有发现,你的安卓手机屏幕颜色突然变得不那么顺眼了?是不是也想给它换换“脸色”,让它看起来更有个...
安卓系统清粉哪个好,哪款清粉工... 手机用久了,是不是觉得卡得要命?别急,今天就来聊聊安卓系统清理垃圾哪个软件好。市面上清理工具那么多,...
华为被限制用安卓系统,挑战安卓... 你知道吗?最近科技圈可是炸开了锅!华为,这个我们耳熟能详的名字,竟然因为一些“小插曲”被限制了使用安...
安卓系统是不是外国,源自外国的... 你有没有想过,我们每天离不开的安卓系统,它是不是外国货呢?这个问题听起来可能有点奇怪,但确实很多人都...
安卓系统缺少文件下载,全面解析... 你有没有发现,用安卓手机的时候,有时候下载个文件真是让人头疼呢?别急,今天就来聊聊这个让人烦恼的小问...
kktv系统刷安卓系统怎么样,... 你有没有听说最近KKTV系统刷安卓系统的事情?这可是个热门话题呢!咱们一起来聊聊,看看这个新玩意儿到...
安卓系统连接电脑蓝牙,操作指南... 你有没有遇到过这种情况:手机里堆满了各种好用的应用,可就是想找个方便快捷的方式,把手机里的音乐、照片...
安卓车机11.0系统包,智能驾... 你有没有发现,最近你的安卓车机系统好像悄悄升级了呢?没错,就是那个安卓车机11.0系统包!这可不是一...
安卓系统最高到多少,从初代到最... 你有没有想过,你的安卓手机系统升级到哪一步了呢?是不是好奇安卓系统最高能到多少呢?别急,今天就来带你...