#include<bits/stdc++.h>
#define lc(u) tr[u].ls
#define rc(u) tr[u].rs
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair<int,int>pii;
const int N=2e4+10;
int n,m,a[N],rt[N],tN;
vector<int>lsh;
vector<int>lct[N];
struct Tr{
int sum,pre,suf,ls,rs;
}tr[N<<6];
int cnt;
void pushup(int u){
tr[u].sum=tr[lc(u)].sum+tr[rc(u)].sum;
tr[u].pre=max(tr[lc(u)].pre,tr[lc(u)].sum+tr[rc(u)].pre);
tr[u].suf=max(tr[rc(u)].suf,tr[rc(u)].sum+tr[lc(u)].suf);
}
void build(int u,int l,int r){
tr[u]={-1,0,0,0,0};
if(l==r)return;
int mid=l+r>>1;
lc(u)=++cnt;
rc(u)=++cnt;
build(lc(u),l,mid);
build(rc(u),mid+1,r);
pushup(u);
}
void change(int u,int pu,int loc,int v,int l,int r){
tr[u]=tr[pu];
if(l==r&&loc==l){
tr[u].sum=v;
if(v>0)tr[u].pre=tr[u].suf=v;
return;
}
int mid=l+r>>1;
if(loc<=mid){
tr[u].ls=++cnt;
change(lc(u),lc(pu),loc,v,l,mid);
}
else{
tr[u].rs=++cnt;
change(rc(u),rc(pu),loc,v,mid+1,r);
}
pushup(u);
}
int qsum(int u,int ql,int qr,int l,int r){
if(l>=ql&&r<=qr)
return tr[u].sum;
if(l>qr||r<ql)return 0;
int mid=l+r>>1;
int res=0;
if(ql<=mid)res+=qsum(lc(u),ql,qr,l,mid);
if(qr>mid)res+=qsum(rc(u),ql,qr,mid+1,r);
return res;
}
int qpre(int u,int ql,int qr,int l,int r){
if(l>=ql&&r<=qr)return tr[u].pre;
if(l>qr||r<ql)return 0;
int mid=l+r>>1;
return max(qpre(lc(u),ql,qr,l,mid),qsum(lc(u),ql,qr,l,mid)+qpre(rc(u),ql,qr,mid+1,r));
}
int qsuf(int u,int ql,int qr,int l,int r){
if(l>=ql&&r<=qr)return tr[u].suf;
if(l>qr||r<ql)return 0;
int mid=l+r>>1;
return max(qsuf(rc(u),ql,qr,mid+1,r),qsum(rc(u),ql,qr,mid+1,r)+qsuf(lc(u),ql,qr,l,mid));
}
int fd(int x){
return lower_bound(lsh.begin(),lsh.end(),x)-lsh.begin();
}
void init(){
cin>>n;
lsh.resize(n+1);
lsh[0]=-1;
for(int i=1;i<=n;++i)cin>>a[i],lsh[i]=a[i];
sort(lsh.begin(),lsh.end());
tN=unique(lsh.begin(),lsh.end())-lsh.begin()-1;
for(int i=1;i<=n;++i){
a[i]=fd(a[i]);
lct[a[i]].emplace_back(i);
}
}
int q[4];
signed main(){
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
init();
rt[tN+1]=++cnt;
build(rt[tN+1],1,n);
for(int i=tN;i;--i){
rt[i]=++cnt;
for(int j=0;j<lct[i].size();++j){
change(rt[i],rt[i+1],lct[i][j],1,1,n);
}
}
cin>>m;
int ans=0,a,b,c,d;
for(int i=1;i<=m;++i){
cin>>a>>b>>c>>d;
q[0]=(a+ans)%n;q[1]=(b+ans)%n;q[2]=(c+ans)%n;q[3]=(d+ans)%n;
sort(q,q+4);
a=q[0]+1;b=q[1]+1;c=q[2]+1;d=q[3]+1;
int midans,lans,rans,mid,l=1,r=tN;
while(l<r){
mid=l+r+1>>1;
midans=qsum(rt[mid],b,c,1,n);
lans=qsuf(rt[mid],a,b-1,1,n);
rans=qpre(rt[mid],c+1,d,1,n);
if(midans+lans+rans>=0)l=mid;
else r=mid-1;
}
ans=lsh[l];
cout<<ans<<'\n';
}
return 0;
}