'''
#include<bits/stdc++.h>
using namespace std;
void buildTree(int *tree, int *a, int index, int s, int e){
//base case
if(s>e) return;
//base case - leaf node
if(s==e)
{
tree[index] = a[s];
return;
}
//recursive case
int mid = (s+e)/2;
buildTree(tree, a, 2*index, s, mid);
buildTree(tree, a, 2*index + 1, mid+1, e);
int left = tree[2*index];
int right = tree[2*index + 1];
tree[index] = min(left, right);}
int query(int *tree, int index, int s, int e, int qs, int qe){
//No overlap case
if(qs>e || qe<s){
return INT_MAX;
}
//Complete overlap case
if(s>=qs && e<=qe){
return tree[index];
}
//Partial Overlap case
int mid = (s+e)/2;
int leftAns = query(tree, 2*index, s, mid, qs, qe);
int rightAns = query(tree, 2*index+1, mid+1, e, qs, qe);
return min(leftAns, rightAns);}
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
//storing segment tree in array
//max size of tree is asssumed to be 4*n + 1
int *tree = new int[4*n+1];
buildTree(tree, a, 1, 0, n-1);
//t - number of queries
int t;
cin>>t;
while(t--){
int qs, qe;
cin>>qs>>qe;
cout<<"Min value between range is: ";
cout<<query(tree, 1, 0, n-1, qs, qe)<<endl;
}}
'''