Pagini recente » Cod sursa (job #3205669) | Cod sursa (job #812605) | Cod sursa (job #215689) | Cod sursa (job #677581) | Cod sursa (job #1456577)
#include <fstream>
#include <cmath>
using namespace std;
ofstream fout("rmq.out");
ifstream fin("rmq.in");
const int NMAX = 100005;
int n, m;
int v[NMAX];
int st[NMAX][19]; // Sparse Table
void read()
{
fin >> n >> m;
for(int i=1; i<=n; i++) fin >> v[i];
}
void create_table()
{
for(int i=1; i<=n; i++)
st[i][0] = i;
for(int j = 1; (1 << j) <= n; j++)
for(int i = 1; i <= n; i++)
if(v[st[i][j - 1]] < v[st[i + (1 << (j - 1))][j - 1]])
st[i][j] = st[i][j - 1];
else
st[i][j] = st[i + (1 << (j - 1))][j - 1];
}
void find_minimum(int i, int j)
{
int k = log2(j - i + 1);
if(v[st[i][k]] <= v[st[j - (1 << k) + 1][k]])
fout << v[st[i][k]] << '\n';
else
fout << v[st[j - (1 << k) + 1][k]] << '\n';
}
void rmq()
{
int x, y;
for(int i=1; i<=m; i++) {
fin >> x >> y;
find_minimum(x, y);
}
}
int main()
{
read();
create_table();
rmq();
fout.close();
fin.close();
return 0;
}