Pagini recente » Cod sursa (job #2405373) | Cod sursa (job #1955550) | Cod sursa (job #2852962) | Cod sursa (job #520454) | Cod sursa (job #3145029)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N, M, x, y;
int A[100010], P[100010][19];
int lg[100010];
void process2()
{
for(int i = 0; i < N; i ++)
P[i][0] = i;
for(int j = 1; (1 << j) <= N; j ++)
for(int i = 0; i + (1 << j) - 1 <= N - 1; i ++)
if( A[ P[i][j - 1] ] < A[ P[i + (1 << (j - 1) )][j - 1] ])
P[i][j] = P[i][j - 1];
else
P[i][j] = P[i + (1 << (j - 1) )][j - 1];
}
int main()
{
f >> N >> M;
for(int i = 0; i < N; i ++)
f >> A[i];
lg[1] = 0;
for(int i = 2 ; i <= N; i ++)
lg[i] = lg[i / 2] + 1;
process2();
for(int i = 1; i <= M; i ++)
{
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;
}