Pagini recente » Cod sursa (job #773875) | Cod sursa (job #1972146) | Cod sursa (job #684235) | Cod sursa (job #1680128) | Cod sursa (job #2902697)
#include<iostream>
#include<fstream>
using namespace std;
int n, m, v[10000], i, M[10000][11111], x, y, j;
int main() {
ifstream f("rmq.in");
ofstream g("rmq.out");
f >> n >> m;
for (i = 0; i < n; i++)
f >> v[i];
for (i = 0; i < n; i++)
M[i][0] = i;
for (j = 1; (1 << j) <= n; j++)
for (i = 0; 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 = 0; i < m; i++)
{
f >> x >> y;
x--;
y--;
int k = floor(log2(y - x + 1));
if (v[M[x][k]] <= v[M[y - (1 << k) + 1][k]])
g<< v[M[x][k]]<<"\n";
else
g << v[M[y - (1 << k) + 1][k]]<<"\n";
}
return 0;
}