排队与插队
春节前后的寒假开始总是交通高峰期的开始。如果您这时候尝试购买火车票,就会目睹每个售票窗口前无尽的排队。如果一个人在队列中见过他的朋友,那么这个幸运的人很可能会直接去找他的朋友求情。这称为“插队”。对于排队的其他人来说,这是不公平的,但这就是生活。
您的任务是编写一个程序,模拟一个这样的队列,人们不时地排队与插队。队伍中如果存在自己的小团体,则会插在这个小团体末尾。否则正常排队,排在整条队伍末尾。
Input Format
第一行是一个数n,表示参与排队的人的个数。
第二行将会读入n个非负整数,第 i 个整数表示第 i 个人所属的团体的 编号 。这些编号的范围是1~9。
第三行是一个数q,代表可能的事件数。
第四行是q个数字,每个数字代表一种可能的事件。
0: 插入一个新人。如果所有人都入过队列,你应当忽略这个操作。
1: 队首的人离开,请输出这个人的编号(他是第几个插入的)。如果队列空,你应当输出"-1"。
Output Format
对于每一个询问类事件,输出对应的答案或者是"-1"。
Sample Input
7
1 2 1 2 2 1 1
7
1 0 0 0 0 1 1
Sample Output
-1
1
3
Limits
对于100%的数据,n, q <= 4000
#include<iostream>
template <class T>
class linkQueue
{
private:
struct node {
T data;
int a;//a为第几个,data为团体标志数
node*next;
node() :next(NULL) {
}
node(const T&x,const int&y, node*N = NULL)
{
data = x;
a = y;
next=N;
}
~node(){
}
};
node*front, *rear;
public:
linkQueue();
~linkQueue();
bool isEmpty()const;
void enQueue(