#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
struct tree {
  int add, l, r;
} t[maxn << 2];
int n, a[maxn], q, type;
void build(int l, int r, int k) {
  t[k].l = l, t[k].r = r, t[k].add = 0;
  if (l == r) {
    t[k].add = a[l];
    return;
  }
  int mid = l + r >> 1;
  build(l, mid, k << 1);
  build(mid + 1, r, k << 1 | 1);
}
void pushdown(int k) {
  int qwq = t[k].add;
  t[k << 1].add = max(t[k << 1].add, qwq);
  t[k << 1 | 1].add = max(t[k << 1 | 1].add, qwq);
  t[k].add = 0;
}
void modify(int k, int p, int q) {
  if (t[k].l == t[k].r) {
    t[k].add = q;
    return;
  }
  pushdown(k);
  int mid = t[k].l + t[k].r >> 1;
  if (p <= mid)
    modify(k << 1, p, q);
  else
    modify(k << 1 | 1, p, q);
}
int query(int k, int x) {
  if (t[k].l == t[k].r) return t[k].add;
  pushdown(k);
  int mid = (t[k].l + t[k].r) >> 1;
  if (x <= mid)
    return query(k << 1, x);
  else
    return query(k << 1 | 1, x);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  build(1, n, 1);
  scanf("%d", &q);
  for (int i = 1; i <= q; i++) {
    int x, y;
    scanf("%d", &type);
    if (type == 1) {
      scanf("%d%d", &x, &y);
      modify(1, x, y);
    } else {
      scanf("%d", &x);
      t[1].add = max(t[1].add, x);
    }
  }
  for (int i = 1; i <= n; i++) printf("%d ", query(1, i));
  return 0;
}
