#include #include #include using namespace std; struct stree { int l,r,mn,mx; }t[4200000]; struct query { int l,r,id; }b[2000005]; int a[2000005],ans[2000005],lst[2000005],A[2000005],n,q; inline bool cmp(query x,query y) { return x.r=p) change(now*2,p,x); else change(now*2+1,p,x); t[now].mn=min(t[now*2].mn,t[now*2+1].mn); t[now].mx=max(t[now*2].mx,t[now*2+1].mx); } inline int qx(int now,int l,int r) { if(t[now].l==l&&t[now].r==r) return t[now].mx; if(t[now*2].r>=r) return qx(now*2,l,r); if(t[now*2+1].l<=l) return qx(now*2+1,l,r); return max(qx(now*2,l,t[now*2].r),qx(now*2+1,t[now*2+1].l,r)); } inline int qn(int now,int l,int r) { if(t[now].l==l&&t[now].r==r) return t[now].mn; if(t[now*2].r>=r) return qn(now*2,l,r); if(t[now*2+1].l<=l) return qn(now*2+1,l,r); return min(qn(now*2,l,t[now*2].r),qn(now*2+1,t[now*2+1].l,r)); } int main(int argc, char** argv) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&A[i]); scanf("%d",&q); for(int i=1;i<=q;i++) scanf("%d%d",&b[i].l,&b[i].r),b[i].id=i; for(int i=1;i<=n;i++) a[i]=1e9; build(1,1,n); sort(b+1,b+q+1,cmp); int now=0; for(int i=1;i<=q;i++) { while(now