Pagini recente » Cod sursa (job #2420024) | Cod sursa (job #2455696)
#include <fstream>
#define MaxN 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int v[MaxN], n, m, k, p, i, j, a, b, M[MaxN][20], log[MaxN];
int main()
{ f >> n >> m;
for(i = 1; i <= n; i++){
f >> v[i];
M[i][0] = i;
}
for(i = 0; (1 << i) <= n; i++)
log[(1 << i)] = i;
for(i = 1; i <= n; i++)
if(log[i] == 0)
log[i] = log[i - 1];
for(j = 1; (1 << j) <= n; j++){
for(i = 1; i + (1 << j) - 1 <= n; i++){
if(v[M[i][j - 1]] < v[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];
}
}
for(i = 1; i <= m; i++){
f >> a >> b;
k = log[b - a + 1];
if(v[M[a][k]] < v[M[b - (1 << k) + 1][k]])
g << v[M[a][k]];
else
g << v[M[b - (1 << k) + 1][k]];
g << '\n';
}
return 0;
}