Mai intai trebuie sa te autentifici.
Cod sursa(job #675071)
| Utilizator | Data | 7 februarie 2012 09:22:17 | |
|---|---|---|---|
| Problema | Range minimum query | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.72 kb |
#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;
}
