#include <bits/stdc++.h>
using namespace std;
struct Query{
int L, R, W;
};
const int MAXN = 1e6 + 5;
const int MAXQ = MAXN * 4;
int label[MAXQ];
int find_set(int u){
return (label[u] < 0 ? u : label[u] = find_set(label[u]));
}
void union_set(int u, int v){
// if(label[u] > label[v]) swap(u, v);
// label[u] += label[v];
// label[v] = u;
label[u] = v;
}
set<pair<int, int>> Pos;
vector<Query> Queries;
int Last[MAXN], arr[MAXN];
int n, q;
void add_que(int l, int r, int w){
if(r < l) return;
int idx = Queries.size();
Queries.push_back({l, r, w});
set<pair<int, int>>::iterator it = Pos.lower_bound({l, -1e9});
while(it != Pos.end()){
if(r < it->first) break;
if(it->second < 0){
Last[-it->second] = idx;
}
else{
union_set(find_set(it->second), find_set(idx));
}
Pos.erase(it++);
}
Pos.insert({w, idx});
}
int main(){
cin.tie(NULL)->sync_with_stdio(false);
if(fopen("test.inp", "r")){
freopen("test.inp", "r", stdin);
freopen("test.out", "w", stdout);
}
cin >> n;
for(int i = 1; i <= n; ++i){
cin >> arr[i];
Last[i] = -1;
Pos.insert({arr[i], -i});
}
memset(label, 0xff, sizeof(label));
cin >> q;
for(int i = 1; i <= q; ++i){
int t, u, v;
cin >> t;
if(t == 1){
cin >> u >> v;
Pos.erase({arr[u], -u});
arr[u] = v;
Last[u] = -1;
Pos.insert({v, -u});
}
else if(t == 2){
cin >> u;
if(Last[u] == -1) cout << arr[u] << '\n';
else cout << Queries[find_set(Last[u])].W << '\n';
}
else{
cin >> u >> v;
int m = u + v >> 1;
add_que(u, m, u - 1);
add_que(m + 1, v, v + 1);
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFF1ZXJ5ewogICAgaW50IEwsIFIsIFc7Cn07Cgpjb25zdCBpbnQgTUFYTiA9IDFlNiArIDU7CmNvbnN0IGludCBNQVhRID0gTUFYTiAqIDQ7CgppbnQgbGFiZWxbTUFYUV07CmludCBmaW5kX3NldChpbnQgdSl7CiAgICByZXR1cm4gKGxhYmVsW3VdIDwgMCA/IHUgOiBsYWJlbFt1XSA9IGZpbmRfc2V0KGxhYmVsW3VdKSk7Cn0Kdm9pZCB1bmlvbl9zZXQoaW50IHUsIGludCB2KXsKLy8gICAgaWYobGFiZWxbdV0gPiBsYWJlbFt2XSkgc3dhcCh1LCB2KTsKLy8gICAgbGFiZWxbdV0gKz0gbGFiZWxbdl07Ci8vICAgIGxhYmVsW3ZdID0gdTsKICAgICAgICBsYWJlbFt1XSA9IHY7Cn0KCnNldDxwYWlyPGludCwgaW50Pj4gUG9zOwp2ZWN0b3I8UXVlcnk+IFF1ZXJpZXM7CmludCBMYXN0W01BWE5dLCBhcnJbTUFYTl07CmludCBuLCBxOwoKdm9pZCBhZGRfcXVlKGludCBsLCBpbnQgciwgaW50IHcpewogICAgaWYociA8IGwpIHJldHVybjsKICAgIGludCBpZHggPSBRdWVyaWVzLnNpemUoKTsKICAgIFF1ZXJpZXMucHVzaF9iYWNrKHtsLCByLCB3fSk7CgogICAgc2V0PHBhaXI8aW50LCBpbnQ+Pjo6aXRlcmF0b3IgaXQgPSBQb3MubG93ZXJfYm91bmQoe2wsIC0xZTl9KTsKICAgIHdoaWxlKGl0ICE9IFBvcy5lbmQoKSl7CiAgICAgICAgaWYociA8IGl0LT5maXJzdCkgYnJlYWs7CiAgICAgICAgaWYoaXQtPnNlY29uZCA8IDApewogICAgICAgICAgICBMYXN0Wy1pdC0+c2Vjb25kXSA9IGlkeDsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgdW5pb25fc2V0KGZpbmRfc2V0KGl0LT5zZWNvbmQpLCBmaW5kX3NldChpZHgpKTsKICAgICAgICB9CiAgICAgICAgUG9zLmVyYXNlKGl0KyspOwogICAgfQogICAgUG9zLmluc2VydCh7dywgaWR4fSk7Cn0KCmludCBtYWluKCl7CiAgICBjaW4udGllKE5VTEwpLT5zeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwoKICAgIGlmKGZvcGVuKCJ0ZXN0LmlucCIsICJyIikpewogICAgICAgICAgICBmcmVvcGVuKCJ0ZXN0LmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgICAgICBmcmVvcGVuKCJ0ZXN0Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gbjsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgKytpKXsKICAgICAgICBjaW4gPj4gYXJyW2ldOwogICAgICAgIExhc3RbaV0gPSAtMTsKICAgICAgICBQb3MuaW5zZXJ0KHthcnJbaV0sIC1pfSk7CiAgICB9CiAgICBtZW1zZXQobGFiZWwsIDB4ZmYsIHNpemVvZihsYWJlbCkpOwoKICAgIGNpbiA+PiBxOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBxOyArK2kpewogICAgICAgIGludCB0LCB1LCB2OwogICAgICAgIGNpbiA+PiB0OwogICAgICAgIGlmKHQgPT0gMSl7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIFBvcy5lcmFzZSh7YXJyW3VdLCAtdX0pOwogICAgICAgICAgICBhcnJbdV0gPSB2OwogICAgICAgICAgICBMYXN0W3VdID0gLTE7CiAgICAgICAgICAgIFBvcy5pbnNlcnQoe3YsIC11fSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYodCA9PSAyKXsKICAgICAgICAgICAgY2luID4+IHU7CiAgICAgICAgICAgIGlmKExhc3RbdV0gPT0gLTEpIGNvdXQgPDwgYXJyW3VdIDw8ICdcbic7CiAgICAgICAgICAgIGVsc2UgY291dCA8PCBRdWVyaWVzW2ZpbmRfc2V0KExhc3RbdV0pXS5XIDw8ICdcbic7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIGludCBtID0gdSArIHYgPj4gMTsKCiAgICAgICAgICAgIGFkZF9xdWUodSwgbSwgdSAtIDEpOwogICAgICAgICAgICBhZGRfcXVlKG0gKyAxLCB2LCB2ICsgMSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0=