int N; int arr[maxn + 10]; int dp[maxn + 10][maxn + 10];
intRMQ(int l, int r){ int k = log2(r - l + 1); returnmin(dp[l][k], dp[r - (1 << k) + 1][k]); }
voidRMQ_init(){ for (int i = 1; i <= N; i++) dp[i][0] = arr[i]; for (int j = 1; (1 << j) <= N; j++) { for (int i = 1; i + (1 << j) - 1 <= N; i++) { dp[i][j] = min(dp[i][j - 1], dp[i + (1 << j - 1)][j - 1]); } } }
int T;
intmain(){ while (cin >> N) { for (int i = 1; i <= N; i++) { cin >> arr[i]; } RMQ_init(); int q; cin >> q; int a, b; for (int i = 1; i <= q; i++) { cin >> a >> b; cout << RMQ(a, b) << '\n'; } } return0; }