Pagini recente » Cod sursa (job #740006) | Cod sursa (job #838175) | Istoria paginii utilizator/ichtv_tinca_mirica_popescu | Cod sursa (job #1901814) | Cod sursa (job #1937340)
#include <iostream>
#include <fstream>
using namespace std;
ofstream fout("rmq.out");
int n, m, A[100004], M[100005][20];
void set_values()
{
for(int j = 1; (1 << j) <= n; ++j)
for(int i = 1; i + (1 << j) - 1 <= n; ++i)
if(M[i][j - 1] <= 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];
}
int solve(int x, int y)
{
if(x > y) return (1 << 30);
int i;
for(i = 0; x + (1 << i) - 1 <= y; ++i);
return min(M[x][i - 1], solve(x + (1 << (i - 1)), y));
}
void read()
{
ifstream fin("rmq.in");
fin >> n >> m;
for(int i = 1; i <= n; ++i){
fin >> A[i];
M[i][0] = A[i];
}
set_values();
int x, y;
for(int i = 1; i <= m; ++i){
fin >> x >> y;
fout << solve(x, y) << '\n';
}
}
int main()
{
read();
return 0;
}