#include #include #include #include #define rep(i,a,b) for(int i=(a);i<(b);i++) #define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() using namespace std; using namespace atcoder; using ll=long long; using ld=long double; using vll=vector; using vvll=vector; using vi=vector; using vvi=vector; using pll=pair; using pi=pair; // using mint=modint998244353; // using mint=modint1000000007; // using mint2=static_modint<2>; // using BoostPoint=boost::polygon::point_data; // using Voronoi=boost::polygon::voronoi_diagram; using S=int; S op(S a,S b){return a+b;} S e(){return 0;} int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N,Q; cin>>N; vi A(N); rep(i,0,N)cin>>A[i]; cin>>Q; const int T=N+Q+1; listL; vector::iterator>it(T); for(auto a:A){ it[a]=L.insert(L.end(),a); } vectorq(Q); for(auto&[t,x]:q){ cin>>t; if(t!=2)cin>>x; } int b=N+1; for(auto&[t,a]:q){ if(t!=1)continue; if(a==0)it[b]=L.insert(L.end(),b); else it[b]=L.insert(it[a],b); b++; } vi P,pos(T); for(auto x:L){ pos[x]=sz(P); P.push_back(x); } vi init(T); for(auto a:A){ init[pos[a]]=1; } segtreeseg(init); b=N+1; int d=0; for(auto [t,k]:q){ if(t==1){ seg.set(pos[b],1); b++; }else if(t==2){ d++; }else{ int rk=d+k; int p=seg.max_right(0,[&](S sum){ return sum