#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; int A[100000]; class segment_tree{ int n; vector dat; int query(int l,int r,int a,int b,int u){ if(l<=a && b<=r) return dat[u]; int res=-1; int c=(a+b)/2; if(lA[tmp]) res=tmp; } if(lA[tmp]) res=tmp; } return res; } public: segment_tree(int N){ for(n=1;n0){ u=(u-1)/2; if(A[dat[2*u+1]]<=A[dat[2*u+2]]){ dat[u]=dat[2*u+1]; } else{ dat[u]=dat[2*u+2]; } } } int query(int l,int r){ return query(l,r,0,n,0); } }; int main(){ int n; scanf("%d",&n); rep(i,n) scanf("%d",&A[i]); segment_tree ST(n); rep(i,n) ST.update(i,i); int q; scanf("%d",&q); rep(_,q){ int type,l,r; scanf("%d%d%d",&type,&l,&r); if(type==1){ l--; r--; int i=ST.query(l,l+1); int j=ST.query(r,r+1); ST.update(l,j); ST.update(r,i); } else{ l--; printf("%d\n",ST.query(l,r)+1); } } return 0; }