#include using namespace std; template struct binary_indexed_tree{ int N; vector BIT; function f; T E; binary_indexed_tree(int N, function f, T E): N(N), BIT(N + 1, E), f(f), E(E){ } void add(int i, T x){ i++; while (i <= N){ BIT[i] = f(BIT[i], x); i += i & -i; } } T sum(int i){ T ans = E; while (i > 0){ ans = f(ans, BIT[i]); i -= i & -i; } return ans; } }; int main(){ int N; cin >> N; vector P(N); for (int i = 0; i < N; i++){ cin >> P[i]; P[i]--; } int Q; cin >> Q; vector x(Q), y(Q); for (int i = 0; i < Q; i++){ cin >> x[i] >> y[i]; y[i]--; } vector> A(N); for (int i = 0; i < Q; i++){ A[y[i]].push_back(i); } vector PP(N); for (int i = 0; i < N; i++){ PP[P[i]] = i; } vector ans(Q); binary_indexed_tree BIT(N, plus(), 0); for (int i = 0; i < N; i++){ for (int j : A[i]){ int tv = N, fv = 0; while (tv - fv > 1){ int mid = (tv + fv) / 2; if (BIT.sum(mid) >= x[j]){ tv = mid; } else { fv = mid; } } ans[j] = max(PP[y[j]] + 1, tv); } BIT.add(PP[i], 1); } for (int i = 0; i < Q; i++){ cout << ans[i] << endl; } }