Go: package main

import (
	"fmt"
)

func main() {
	var n int // こま数

	_, _ = fmt.Scan(&n)

	xa := make([]int, n) // こま座標

	for i:= 0;i < n ; i++ {
		_, _ = fmt.Scan(&xa[i])
	}

	var m int // 操作数

	_, _ = fmt.Scan(&m)

	ma := make([]int, m) // 操作対象

	for i:= 0;i < m ; i++ {
		_, _ = fmt.Scan(&ma[i])
	}

	for _, v := range calc(xa, ma) {
		fmt.Println(v)
	}
}

func calc(xa []int, ma []int) []int {
	for _, v := range ma {
		if xa[v-1] < 2019 {
			if  len(xa) != v {
				if xa[v]-1 != xa[v-1] {
					xa[v-1]++
				}
			} else {
				xa[v-1]++
			}
		}
	}
	return xa
}

C++: #include<vector>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <cmath>
#include<queue>
#include <sstream>

#define INF 100000000000000
using namespace std;
typedef long long llong;

//int isalpha(char ch): ch がアルファベットなら true を返す
//int isdigit(char ch): ch が数字なら true を返す
//int islower(char ch): ch が小文字なら true を返す
//int isupper(char ch): ch が大文字なら true を返す
//int tolower(char ch): ch の小文字を返す
//int toupper(char ch): ch の大文字を返す

//string型
//size()	文字数を返す
//Insert()	（指定した場所に）文字・文字列を挿入する
//erase()	（指定した場所の）文字・文字列を削除する
//clear()	すべての文字を削除する
//substr()	文字列の（指定した）部分文字列を返す
//replace()	（指定した）部分文字列を新しい文字列に置換する
//c_str()変換
//文字列の比較は、<=や==などを使え
//replace関数を使い、簡単に文字列を置換
//リバース関数：reverse(str.begin(), str.end());
//map<type, type> dict;で宣言
//グラフ理論用変数
//vector<vector<llong> > graph(N);

//ソート
//降順sort(v.begin(), v.end(), std::greater<Type>());

//大文字から小文字へんかん
//w[i] = w[i]-'A'+'a';

//vector
//assignメソッド　引数：サイズ、値
//与えられたサイズと値でvectorを初期化する

//queueクラス
//find()次に取り出す値の表示をする。
//pop()値を取り出す。戻り値はなし
//push()キューに値をプッシュする

//priority_queueクラス

//切り上げ
//ceil
//floor

int main(){
    llong N,M;
    cin >> N;
    vector<int> X(N,0);
    for(int i=0; i<N; i++){
        cin >> X[i];
    }
    cin >> M;
    vector<int> A(M,0);
    for(int i=0; i<M; i++){
        cin >> A[i];
    }
    unsigned char flg;
    //シミュレーション
    for(int i=0; i<A.size(); i++){
        flg=0;
        for(int j=0; j<X.size(); j++){
            if((A[i]-1)!=j && (X[A[i]-1]+1)!=X[j]){
                continue;
            }else if((A[i]-1)!=j && (X[A[i]-1]+1)==X[j]){
                flg = 1;
            }
        }
        if(flg==0 && X[A[i]-1]<2019){
            X[A[i]-1]+=1;
        }
    }
    for(int i=0; i<X.size(); i++){
        cout << X[i] << endl;
    }
    return 0;
}

C++: #include "iostream"
#include "string"
#include "algorithm"
using namespace std;
/*
struct dice {
	int s[6];
	void roll(char c) {
		int b;
		if (c == 'E') {
			b = s[0];
			s[0] = s[3];
			s[3] = s[5];
			s[5] = s[2];
			s[2] = b;
		}
		if (c == 'N') {
			b = s[0];
			s[0] = s[1];
			s[1] = s[5];
			s[5] = s[4];
			s[4] = b;
		}
		if (c == 'S') {
			b = s[0];
			s[0] = s[4];
			s[4] = s[5];
			s[5] = s[1];
			s[1] = b;
		}
		if (c == 'W') {
			b = s[0];
			s[0] = s[2];
			s[2] = s[5];
			s[5] = s[3];
			s[3] = b;
		}
		if (c == 'R') {
			b = s[1];
			s[1] = s[3];
			s[3] = s[4];
			s[4] = s[2];
			s[2] = b;
		}
	}
	int top() {
		return s[0];
	}
	int right() {
		return s[2];
	}
	int left() {
		return s[3];
	}
	int front() {
		return s[1];
	}

};

int main() {
	dice d;
	for (int i = 0; i < 6; i++) {
		cin >> d.s[i];
	}
	int order;
	cin >> order;
	while(order--) {
		int top, front;
		cin >> top >> front;
		if (d.left() == top) {
			d.roll('E');
		}
		if (d.right() == top) {
			d.roll('W');
		}
		while (d.top() != top) {
			d.roll('N');
		}
		while (d.front() != front) {
			d.roll('R');
		}
		cout << d.right() << endl;
	}
}
*/

int main() {
	int n, x[100] = {};
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> x[i];
	}
	int m, a;
	cin >> m;
	for (int i = 0; i < m; i++) {
		cin >> a;
		if (x[a] != x[a - 1] + 1 && x[a-1] != 2019) {
			x[a - 1]++;
		}
	}
	for (int i = 0; i < n; i++) {
		cout << x[i] << endl;
	}
}

C++: #include<bits/stdc++.h>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define HUGE_NUM 99999999999999999
#define MOD 1000000007
#define EPS 0.000000001
using namespace std;
 
 
#define GOAL 2019
#define NUM 105
 
int N,M;
int loc[NUM];
bool check[GOAL+1];
 
int main(){
 
    scanf("%d",&N);
 
    for(int i = 1; i <= GOAL; i++){
 
        check[i] = false;
    }
 
    for(int i = 1; i <= N; i++){
 
        scanf("%d",&loc[i]);
        check[loc[i]] = true;
    }
 
    scanf("%d",&M);
 
    int tmp;
 
    for(int loop = 0; loop < M; loop++){
 
        scanf("%d",&tmp);
 
        if(loc[tmp] == GOAL)continue;
        if(check[loc[tmp]+1])continue;
 
        check[loc[tmp]] = false;
        loc[tmp]++;
        check[loc[tmp]] = true;
    }
 
    for(int i = 1; i <= N; i++){
 
        printf("%d\n",loc[i]);
    }
 
    return 0;
}

C++: #include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> x(n);
    for (int i = 0; i < n; ++i) {
        cin >> x[i];
    }
    int m;
    cin >> m;
    for (int i = 0; i < m; ++i) {
        int a;
        cin >> a;
        --a;
        if ((a == n - 1 || x[a] + 1 < x[a + 1]) && x[a] != 2019) ++x[a];
    }
    for (int i = 0; i < n; ++i) {
        cout << x[i] << '\n';
    }
    return 0;
}

C++: #include<iostream>
using namespace std;

int main(){
  int map[2020] = {};
  int n,m;
  cin >> n;
  int koma[n+1] = {};
  for(int i=1; i<=n; ++i){
    int tmp;
    cin >> tmp;
    map[tmp] = 1;
    koma[i] = tmp; 
  }
  cin >> m;
  for(int i=0; i<m; ++i){
    int tmp;
    cin >> tmp;
    //cout << koma[tmp] << endl; 
    if(map[koma[tmp]+1] != 1 && koma[tmp] != 2019){
      map[koma[tmp]] = 0;
      map[koma[tmp]+1] = 1;
      ++koma[tmp];
    }
  }
  for(int i=1; i<=2019; ++i){
    if(map[i] == 1){
      cout << i << endl;
    }
  }
}

C++: #include <iostream>
using namespace std;
int main(){
  int n;cin>>n;
  int a[n];
  for(int i = 0; n > i; i++){
    cin>>a[i];
  }
  int q;cin>>q;
  for(int i = 0; q > i; i++){
    int t;cin>>t;
    if(a[t-1]+1!=a[t])a[t-1]=min(a[t-1]+1,2019);
  }
  for(int i = 0; n > i; i++){
    cout << a[i] << endl;
  }
}