#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5;
class SegmentTree {
  int ar[MAXN * 3];
  void Add(int l, int r, int l1, int r1, int index, int value) {
    if (l == l1 && r == r1) {
      ar[index] = max(ar[index], value);
      return;
    }
    int med = (l + r) / 2;
    if (l1 <= med) Add(l, med, l1, min(med, r1), index * 2 + 1, value);
    if (r1 > med) Add(med + 1, r, max(l1, med + 1), r1, index * 2 + 2, value);
  }
  int Get(int l, int r, int i, int index) {
    if (l == r) return ar[index];
    int med = (l + r) / 2;
    if (i <= med) return max(Get(l, med, i, index * 2 + 1), ar[index]);
    return max(Get(med + 1, r, i, index * 2 + 2), ar[index]);
  }

 public:
  int n;
  SegmentTree(int n) {
    this->n = n;
    memset(ar, 0, 3 * MAXN);
  }
  void Add(int value, int step) { Add(0, n - 1, 0, step, 0, value); }
  int Get(int step) {
    int v = Get(0, n - 1, step, 0);
    return v;
  }
};
int balance[MAXN];
int step[MAXN];
int main() {
  memset(step, -1, MAXN);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> balance[i];
  }
  int q;
  cin >> q;
  auto tree = new SegmentTree(q);
  for (int i = 0; i < q; i++) {
    int step1;
    cin >> step1;
    if (step1 == 1) {
      int num;
      int value;
      cin >> num >> value;
      num--;
      balance[num] = value;
      step[num] = i;
    } else {
      int value;
      cin >> value;
      tree->Add(value, i);
    }
  }
  for (int i = 0; i < n; i++) {
    cout << max(balance[i], tree->Get(step[i])) << ' ';
  }
  return 0;
}
