#include #include using namespace std; using namespace atcoder; using ll = long long; template struct CompressedLazySegTree { private: lazy_segtree seg; vector s; int idx(T x) { return ranges::lower_bound(s, x) - s.begin(); } public: void use(T x) { s.emplace_back(x); } void build() { ranges::sort(s); s.erase(unique(s.begin(), s.end()), s.end()); seg = lazy_segtree(s.size()); } void set(T i, S x) { seg.set(idx(i), x); } S get(T i) { return seg.get(idx(i)); } S prod(T l, T r) { return seg.prod(idx(l), idx(r)); } S all_prod() { return seg.all_prod(); } void apply(T i, F f) { seg.apply(idx(i), f); } void apply(T l, T r, F f) { seg.apply(idx(l), idx(r), f); } template int max_right(T l) { return seg.max_right(idx(l), [](S x) { return f(x); }); } template int min_left(T r) { return seg.min_left(idx(r), [](S x) { return f(x); }); } }; using S = ll; using F = ll; S op(S l, S r) { return max(l, r); } S e() { return -1; } S fx(F f, S x) { return (f == 1e18 ? x : f); } F fg(F f, F g) { return (f == 1e18 ? g : f); } F id() { return 1e18; } int main() { ios::sync_with_stdio(false); cin.tie(0); ll N, A; cin >> N >> A; CompressedLazySegTree seg; vector X(N); for(auto &i : X) { cin >> i; seg.use(i); } seg.build(); ll Q; cin >> Q; for(ll i = 0; i < Q; i++) { ll l, r; cin >> l >> r; r++; seg.apply(l, r, i + 1); } for(ll i = 0; i < N; i++) { cout << seg.get(X[i]) << "\n"; } }