Pagini recente » Cod sursa (job #1067907) | Cod sursa (job #1667658) | Cod sursa (job #232524) | Cod sursa (job #1099326) | Cod sursa (job #3170927)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMax= 100000;
int RMQ[20][NMax+5], n, m;
int log2[100006];
void Read()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> RMQ[0][i];
}
void Precalculate()
{
for (int i = 2; i <= n; i++)
log2[i] = log2[i/2] + 1;
for (int i = 1; (1<<i) <= n; i++)
{
for (int j = 1; j <= n - (1<<i) + 1; j++)
{
RMQ[i][j] = min(RMQ[i-1][j], RMQ[i-1][j+(1<<(i-1))]);
}
}
}
void SolveandPrint()
{
while(m--)
{
int x, y;
fin >> x >> y;
int k= log2[y-x+1];
fout << min(RMQ[k][x],RMQ[k][y-(1<<k)+1])<<'\n';
}
}
int main()
{
Read();
Precalculate();
SolveandPrint();
return 0;
}