全输出0。。。。
#include<bits/stdc++.h>
#define N 1000005
using namespace std;
struct node {
int v, ls, rs;
} t[N << 2];
int rt[N << 2], cnt;
int tot, n, m, a[N << 2];
void change(int lsto, int &o, int l, int r, int q, int v) { //a[q] += v;
if(!o) o = ++cnt;
if(l == r) {
t[o].v = v;
return;
}
int mid = (l + r) / 2;
if(q <= mid) {
t[o].rs = t[lsto].rs;
t[o].ls = ++cnt;
t[t[o].ls] = t[t[lsto].ls];
change(t[lsto].ls, t[o].ls, l, mid, q, v);
}
else {
t[o].ls = t[lsto].ls;
t[o].rs = ++cnt;
t[t[o].rs] = t[t[lsto].rs];
change(t[lsto].rs, t[o].rs, mid + 1, r, q, v);
}
}
int query(int o, int l, int r, int x) {
if(l == r) return t[o].v;
int mid = (l + r) / 2;
if(x <= mid) return query(t[o].ls, l, mid, x); // 说明第k小的数的值域是[l, mid]
else return query(t[o].rs, mid + 1, r, x); // 说明第k小的数的值域是[mid + 1, r]
}
void add(int v) {
rt[v] = ++cnt;
t[rt[v]] = t[rt[1]];
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> a[i];
change(rt[0], rt[1], 1, n, a[i], 1);
}
for(int i = 2; i <= n; i++) add(i);
for(int i = 1; i <= m; i++) {
int v, opt, x, y;
cin >> v >> opt;
if(opt == 1) {
cin >> x >> y;
change(rt[1], rt[v], 1, n, x, y);
}
else {
cin >> x;
cout << query(rt[v], 1, n , x) << endl;
}
}
return 0;
}