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