Pagini recente » Cod sursa (job #772272) | Cod sursa (job #2743631) | Cod sursa (job #2272541) | Cod sursa (job #223815) | Cod sursa (job #675071)
Cod sursa(job #675071)
#include <fstream>
using namespace std;
ifstream fi ("rmq.in");
ofstream fo ("rmq.out");
const int dim = 100005, lgm = 20;
int N, M, A[lgm][dim], P2[dim];
void init ()
{
fi >> N >> M;
for (int i = 1; i <= N; i++)
fi >> A[0][i];
P2[1] = 0;
for (int i = 2; i <= dim ; i++)
P2[i] = P2[i>>1] + 1;
for (int j = 1; (1 << j) <= N; j++)
{
for (int i = 1; i + (1 << j) - 1 <= N; i++)
{
A[j][i] = min (A[j - 1][i], A[j - 1][i + (1 << (j - 1))]);
}
}
}
int query (int a, int b)
{
int j = P2[b - a + 1];
return min (A[j][a], A[j][b + 1 - (1 << j)]);
}
int main ()
{
init ();
int a, b;
while ( M-- )
{
fi >> a >> b;
fo << query (a, b) << '\n';
}
return 0;
}