Pagini recente » Cod sursa (job #2851413) | Cod sursa (job #820934) | Cod sursa (job #20828) | Cod sursa (job #2165000) | Cod sursa (job #1166513)
#include <fstream>
#include <algorithm>
using namespace std;
const char InFile[] = "rmq.in";
const char OutFile[] = "rmq.out";
const int MaxN = 100111;
const int LogMaxN = 20;
ifstream fin(InFile);
ofstream fout(OutFile);
int N, M, x, y, lg[MaxN], rmq[LogMaxN][MaxN];
int main()
{
fin >> N >> M;
for (register int i = 1; i <= N; ++i)
{
fin >> rmq[0][i];
}
for (register int i = 2; i <= N; ++i)
{
lg[i] = lg[i>>1]+1;
}
int step = 1;
for (register int i = 1; i < LogMaxN; ++i, step<<=1)
{
for (register int j = 1; j <= N; ++j)
{
if (j + step>MaxN)
{
rmq[i][j] = rmq[i - 1][j];
}
else
{
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+step]);
}
}
}
for (register int i = 1; i <= M; ++i)
{
fin >> x >> y;
if (x > y)
{
swap(x, y);
}
int len = y-x+1;
fout << min(rmq[lg[len]][x],rmq[lg[len]][y-(1<<lg[len])+1]) << "\n";
}
fin.close();
fout.close();
return 0;
}