[SDOI2007]小组队列

成绩 0 开启时间 2013年02月21日 星期四 23:02
折扣 0.8 折扣时间 2013年02月28日 星期四 23:02
允许迟交 关闭时间 2013年02月28日 星期四 23:02
输入文件 team.in 输出文件 team.out
【问题描述】
队列和优先队列(用堆实现)是常用的数据结构,但是有一种小组队列却很少有人知道,
尽管在生活中经常使用。在人们素质不是很高的地方排队其实不是使用队列,而是小组队列。
在人们索质不是很高的地方,排队往往是这样的:每个人都属于一个小组,并且该小组
的人非常团结。每当一个人来排队的时候,他会先看一下前边有没有自己小组的成员,如果
有的话,他会站到自己小组最后一个成员的后边,如果没有的话,是他最倒霉的时候,他必
须站到整个队列的最后。
现在,要求写一种数据结构来模拟小组队列。
具体问题:有m个小组, n 个元素(编号 0..n-1 ) ,每个元素属于一个小组,当元素 k
进入队列时,如果前边有 k 所属小组的元素,k 会排到自己小组最后一个元素的下一个位
置,否则 k 排到整个队列最后的位置。出队的方式和普通的队列相同,即排在前边的元素
先出队。
注:每个元素可能进出队列多次。进出队列的命令最多 100 000 个。
【输入】(team.in)
第一行m (m<= 300)
以下 m 行,每行表示一个小组。每行开始有一个 k 表示该组的元素个数(1 <= k <=总
元素个数),接下来 k 个数,每个数表示该组的一个元素的编号。
以下若干行(以"STOP"结束),每行有“ENQUEUE k” 或“DEQUEUE”,前者表示元
素 k 进队,后者表示队头的元素出队。
【输出】(team.out)
对应每个出队命令,按出队顺序依次输出出队的元素,每个一行。
【样例输入】
4
4 0 1 2 3
4 4 5 6 7
4 8 9 10 11
4 12 13 14 15
ENQUEUE 6
ENQUEUE 14
ENQUEUE 1
ENQUEUE 11
ENQUEUE 2
ENQUEUE 4
ENQUEUE 13
ENQUEUE 15
ENQUEUE 12
ENQUEUE 7
ENQUEUE 9
ENQUEUE 10
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
ENQUEUE 8
ENQUEUE 12
ENQUEUE 6
ENQUEUE 3
ENQUEUE 5
ENQUEUE 1
ENQUEUE 4
ENQUEUE 15
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
STOP
【样例输出】
6
4
7
14
13
15
12
1
2
3
1
11
9
10
8
12
15
6
5
4
范围说明:前30% 1<=n<=100 1<=m<=10 进出队命令<=50
全部 1<=n<=100 000 1<=m<=300 命令<=100 000