#include #include #include using namespace std; #define lli long long int pair m[1000000]; lli arr[110000]; pair maxfunct(paira,pairb){ lli ar[5]; ar[0] = a.first; ar[1] = a.second; ar[2] = b.first; ar[3] = b.second; sort(ar,ar+4); pairans; ans.first = ar[3]; ans.second = ar[2]; return ans; } pair init(int node,int st,int en){ if(st==en){ pairp; p.first = arr[st]; p.second = 0; m[node] = p; return p; } int mid = (st+en)/2; pair t1 = init(node*2,st,mid); pair t2 = init(node*2+1,mid+1,en); pair tt = maxfunct(t1,t2); //cout< update(int node,int st,int en,int i,int x){ if(eni) return m[node]; if(i==st&&i==en){ pairp; p.first = x; p.second = 0; m[node] = p; return p; } int mid = (st+en)/2; pair t1 = update(node*2,st,mid,i,x); pair t2 = update(node*2+1,mid+1,en,i,x); pair tt = maxfunct(t1,t2); m[node] = tt; return tt; } pair query(int node,int st,int en,int i,int j){ if(enj){ pairp; p.first = 0; p.second = 0; return p; } if(i<=st&&j>=en){ return m[node]; } int mid = (st+en)/2; pair t1 = query(node*2,st,mid,i,j); pair t2 = query(node*2+1,mid+1,en,i,j); pair tt = maxfunct(t1,t2); return tt; } int main(){ int n; int q; int x,y; char ch; while(scanf("%d",&n)==1){ for(int i=1;i<=n;i++) scanf("%lld",&arr[i]); init(1,1,n); scanf("%d",&q); for(int i=0;i ans = query(1,1,n,x,y); printf("%lld\n",ans.first+ans.second); } } } }