#include <bits/stdc++.h>
using namespace std;
const int HAUTEUR = 18;
const int TAILLE = (1 << (HAUTEUR + 1));
const int iDebFeuilles = (1 << HAUTEUR);
const int VIDE = 1e9 + 1;
int arbre[TAILLE];
bool prop[TAILLE];
void descente(int pos, int chemin, int prof, int val) {
  if (pos >= iDebFeuilles) {
    arbre[pos] = val;
  } else {
    if (prop[pos]) {
      prop[pos] = false;
      prop[2 * pos] = prop[2 * pos + 1] = true;
      arbre[2 * pos] = max(arbre[2 * pos], arbre[pos]);
      arbre[2 * pos + 1] = max(arbre[2 * pos + 1], arbre[pos]);
    }
    arbre[pos] = min(arbre[pos], val);
    if (chemin & (1 << prof))
      descente(2 * pos + 1, chemin, prof - 1, val);
    else
      descente(2 * pos, chemin, prof - 1, val);
  }
}
int main() {
  for (int i = 0; i < TAILLE; i++) arbre[i] = VIDE;
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &arbre[iDebFeuilles + i]);
  for (int i = iDebFeuilles - 1; i > 0; i--)
    arbre[i] = min(arbre[2 * i], arbre[2 * i + 1]);
  int q;
  scanf("%d", &q);
  for (int i = 0; i < q; i++) {
    int type;
    scanf("%d", &type);
    if (type == 1) {
      int p, x;
      scanf("%d%d", &p, &x);
      p--;
      descente(1, p, HAUTEUR - 1, x);
    } else {
      int x;
      scanf("%d", &x);
      arbre[1] = max(arbre[1], x);
      prop[1] = true;
    }
  }
  for (int pos = 1; pos < iDebFeuilles; pos++) {
    if (!prop[pos]) continue;
    prop[2 * pos] = prop[2 * pos + 1] = true;
    arbre[2 * pos] = max(arbre[2 * pos], arbre[pos]);
    arbre[2 * pos + 1] = max(arbre[2 * pos + 1], arbre[pos]);
  }
  for (int i = 0; i < n; i++) printf("%d ", arbre[iDebFeuilles + i]);
}
