#include <bits/stdc++.h>
int main() {
  int32_t num_citizens;
  std::cin >> num_citizens;
  int32_t* last_update_time = new int32_t[num_citizens];
  int32_t* last_update = new int32_t[num_citizens];
  for (int32_t i = 0; i < num_citizens; i++) {
    std::cin >> last_update[i];
    last_update_time[i] = -1;
  }
  int32_t num_queries;
  std::cin >> num_queries;
  std::vector<std::pair<int32_t, int32_t> > payouts;
  for (int32_t q = 0; q < num_queries; q++) {
    int32_t type;
    std::cin >> type;
    if (type == 1) {
      int32_t person, res;
      std::cin >> person >> res;
      last_update[person - 1] = res;
      last_update_time[person - 1] = q;
    } else {
      int32_t bound;
      std::cin >> bound;
      payouts.emplace_back(q, bound);
    }
  }
  int32_t* suffix_maximums_payouts = new int32_t[payouts.size() + 1];
  suffix_maximums_payouts[0] = 0;
  for (int32_t i = 1; i <= payouts.size(); i++) {
    suffix_maximums_payouts[i] = std::max(suffix_maximums_payouts[i - 1],
                                          payouts[payouts.size() - i].second);
  }
  for (int32_t i = 0; i < num_citizens; i++) {
    int32_t answer_cur = last_update[i];
    int32_t left = 0;
    int32_t right = payouts.size() + 1;
    while (right - left > 1) {
      int32_t m = (left + right) / 2;
      if (payouts[payouts.size() - m].first > last_update_time[i])
        left = m;
      else
        right = m;
    }
    answer_cur = std::max(answer_cur, suffix_maximums_payouts[left]);
    std::cout << answer_cur << " ";
  }
  return 0;
}
