Problem:
すごろくと駒 (Sugoroku and Pieces)

問題文

JOI 君はすごろくを持っている．このすごろくは 2019 個のマスが横一列に並んだ形をしている．これらのマスには，左端のスタートマスから右端のゴールマスへと順に 1 から 2019 までの番号がついている．

現在このすごろくの上には，N 個の駒が置かれている．これらの駒には，スタートに近い順に 1 から N までの番号がついている．駒 i (1 ≦ i ≦ N) は，マス X_i に置かれている．すべての駒は異なるマスに置かれている．

JOI 君はこれから M 回の操作を行う．j 回目 (1 ≦ j ≦ M) の操作では，駒 A_j を 1 マス先へ進める．ただし，移動元のマスがゴールマスであった場合，もしくは移動先のマスに別の駒が置かれている場合，駒 A_j は進まず，位置は変わらない．

すべての操作が終了した時点で，各駒が置かれているマスを求めよ．

制約

1 ≦ N ≦ 100

1 ≦ X_1 < X_2 < ... < X_N ≦ 2019

1 ≦ M ≦ 100

1 ≦ A_j ≦ N (1 ≦ j ≦ M)

入力・出力

入力

入力は以下の形式で標準入力から与えられる．

N

X_1 X_2 ... X_N

M

A_1 A_2 ... A_M

出力

N 行出力せよ．i 行目 (1 ≦ i ≦ N) には，すべての操作が終了した時点で駒 i が置かれているマスの番号を出力せよ．

入出力例

入力例 1

3
2 3 6
2
1 3

出力例 1

2
3
7

1 回目の操作では，駒 1 をマス 2 からマス 3 へと進めようする．しかし，駒 2 がすでにマス 3 に置かれているため，駒 1 は進まない．

2 回目の操作では，駒 3 をマス 6 からマス 7 へと進める．

すべての操作が終了した時点で，駒 1 はマス 2 に，駒 2 はマス 3 に，駒 3 はマス 7 に置かれている．

入力例 2

2
1 2016
4
2 2 2 2

出力例 2

1
2019

3 回目の操作が完了した時点で，駒 2 はマス 2019 に置かれている．そのため，4 回目の操作では駒 2 は進まない．

入力例 3

4
1001 1002 1003 1004
7
1 2 3 4 3 2 1

出力例 3

1002
1003
1004
1005

情報オリンピック日本委員会作 『第 18 回日本情報オリンピック JOI 2018/2019 予選競技課題』

Solution in Python3 (judge verdict: Accepted)

#!/usr/bin/python3

import array
from fractions import Fraction
import functools
import itertools
import math
import os
import sys


def main():
    N = read_int()
    X = read_ints()
    M = read_int()
    A = read_ints()
    print(*solve(N, X, M, A), sep='\n')


def solve(N, X, M, A):
    ar = [0] * 2020
    pos = [0] * (N + 1)
    for i, x in enumerate(X):
        ar[x] = i + 1
        pos[i + 1] = x

    for a in A:
        x = pos[a]
        if x != 2019 and ar[x + 1] == 0:
            ar[x] = 0
            ar[x + 1] = a
            pos[a] = x + 1

    return pos[1:]


###############################################################################
# AUXILIARY FUNCTIONS

DEBUG = 'DEBUG' in os.environ


def inp():
    return sys.stdin.readline().rstrip()


def read_int():
    return int(inp())


def read_ints():
    return [int(e) for e in inp().split()]


def dprint(*value, sep=' ', end='\n'):
    if DEBUG:
        print(*value, sep=sep, end=end)


if __name__ == '__main__':
    main()