Pagini recente » Cod sursa (job #29628) | Cod sursa (job #2734400) | Cod sursa (job #409354) | Cod sursa (job #2830702) | Cod sursa (job #3130241)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N, M;
int P[100005][20], A[100005];
int lg[100005];
void process2(int M[][20], int A[], int N)
{
for(int i = 0; i < N; i ++)
M[i][0] = i;
for(int j = 1; (1 << j) <= N; j ++)
for(int i = 0; i + (1 << j) - 1 < N; i ++)
if(A[ M[i][j - 1] ] < A[ M[i + (1 << (j - 1)) ][j - 1] ])
M[i][j] = M[i][j - 1];
else
M[i][j] = M[i + (1 << (j - 1)) ][j - 1];
}
int main()
{
f >> N >> M;
for(int i = 0; i < N; i ++)
f >> A[i];
process2(P, A, N);
lg[1] = 0;
for(int i = 2; i <= N; i ++)
lg[i] = lg[i / 2] + 1;
for(int i = 1; i <= M; i ++)
{
int x, y;
f >> x >> y;
x --, y --;
int k = lg[y - x + 1];
g << min(A[P[x][k]], A[P[y - (1 << k) + 1][k]] ) << '\n';
}
return 0;
}