Pagini recente » Cod sursa (job #1050491) | Cod sursa (job #1959937) | Cod sursa (job #953095) | Cod sursa (job #2918397) | Cod sursa (job #2817957)
#include <fstream>
#define MAXX 100000
using namespace std;
int v[MAXX + 1], sparseTbl[MAXX + 1][17];
int n, m, i, a, b;
int log2[MAXX + 1];
void precomputeLogs(int n) {
int i;
log2[1] = 0;
for (i = 2; i <= n; ++i)
log2[i] = log2[i / 2] + 1;
}
void buildTbl(){
int p;
for (p = 1; p <= 16; p ++)
for (i = 0; i + (1 << p) - 1 < n; i ++){
sparseTbl[i][p] = min(sparseTbl[i][p - 1], sparseTbl[i + (1 << p - 1)][p - 1]);
}
}
int query (int a, int b){
int len = b - a + 1;
return min (sparseTbl[a][log2[len]], sparseTbl[b - (1 << log2[len]) + 1][log2[len]]);
}
ifstream in ("rmq.in");
ofstream out ("rmq.out");
int main()
{
in >> n >> m;
for (i = 0; i < n; i ++)
in >> sparseTbl[i][0];
buildTbl();
precomputeLogs(n);
for (i = 0; i < m; i ++){
in >> a >> b;
out << query(a - 1, b - 1) << '\n';
}
return 0;
}