#include #include #include #include using namespace std; #define DG if(0) #define MAXM 1050000 int M, Q; int IN[MAXM]; int A[MAXM]; int RMQ[23][MAXM]; int log2[MAXM]; void precompute() { for (int i = 0; i < M; i++) { RMQ[0][i] = A[i]; } for (int l = 1; (1< last; for (int i = 0; i < M; i++) { scanf("%d", &IN[i]); A[i] = last.count(IN[i]) ? last[IN[i]] : -1; last[IN[i]] = i; } precompute(); DG { printf("IN:\t"); for (int i = 0; i < M; i++) printf("% 4d ", IN[i]); printf("\n"); printf("A:\t"); for (int i = 0; i < M; i++) printf("% 4d ", A[i]); printf("\n"); for (int j = 0; j < 5; j++) { printf("RMQ[%d]:\t", j); for (int i = 0; i < M; i++) printf("% 4d ", RMQ[j][i]); printf("\n"); } } for (int i = 0; i < Q; i++) { int a, b; scanf("%d%d", &a, &b); a--; b--; b++; int m = getrmq(a, b); DG printf("je to %d\n", m); if (m >= a) { printf("%d\n", IN[m]); } else { printf("OK\n"); } } printf("\n"); } }