Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Problem A
Rearranging a Sequence

You are given an ordered sequence of integers, ($1, 2, 3, ..., n$). Then, a number of requests will be given. Each request specifies an integer in the sequence. You need to move the specified integer to the head of the sequence, leaving the order of the rest untouched. Your task is to find the order of the elements in the sequence after following all the requests successively.

Input

The input consists of a single test case of the following form.

$n$ $m$

$e_1$

...

$e_m$

The integer $n$ is the length of the sequence ($1 \leq n \leq 200000$). The integer $m$ is the number of requests ($1 \leq m \leq 100000$). The following $m$ lines are the requests, namely $e_1, ..., e_m$, one per line. Each request $e_i$ ($1 \leq i \leq m$) is an integer between 1 and $n$, inclusive, designating the element to move. Note that, the integers designate the integers themselves to move, not their positions in the sequence.

Output

Output the sequence after processing all the requests. Its elements are to be output, one per line, in the order in the sequence.

Sample Input 1

5 3
4
2
5

Sample Output 1

5
2
4
1
3

Sample Input 2

10 8
1
4
7
3
4
10
1
3

Sample Output 2

3
1
10
4
7
2
5
6
8
9

In Sample Input 1, the initial sequence is (1, 2, 3, 4, 5). The first request is to move the integer 4 to the head, that is, to change the sequence to (4, 1, 2, 3, 5). The next request to move the integer 2 to the head makes the sequence (2, 4, 1, 3, 5). Finally, 5 is moved to the head, resulting in (5, 2, 4, 1, 3).

Solution in C (judge verdict: Accepted)

// AOJ 1367: Rearranging a Sequence
// 2017.10.9 bal4u@uu

#include <stdio.h>
#include <stdlib.h>

typedef struct { int id, a; } T;
T tbl[200002];

char buf[100], *p;

int getInt(void)
{
	int n = 0;
//	if (*p == ' ') p++;
	while (*p >= '0') n = (n<<3) + (n<<1) + (*p++ - '0');
	return n;
}

int rint2sz(int n, int off)
{
    int k;
    if ((k = n / 10) != 0) off = rint2sz(k, off);
    *(p + off) = n % 10 + '0';
    return off+1;
}

int cmp(T *a, T *b) { return b->id - a->id; }	// for qsort()

int main()
{
	int n, m, i, j;
	register T *tp;

	fgets(p = buf, 50, stdin); n = getInt(), p++, m = getInt(); 
//	scanf("%d%d", &n, &m);
	for (tp = tbl+1, j = n, i = 1; i <= n; i++, tp++) tp->id = j--, tp->a = i;
	while (m-- > 0) {
		fgets(p = buf, 50, stdin); j = getInt();
//		scanf("%d", &j);
		tbl[j].id = i++;
	}
	qsort(tbl+1, n, sizeof(T), cmp);
	p = buf, tp = tbl; while (n-- > 0) {
		tp++;
		*(p + rint2sz(tp->a, 0)) = 0;
		puts(p);
//		printf("%d\n", tp->a);
	}
	return 0;
}