Pagini recente » Cod sursa (job #716319) | Cod sursa (job #1427994) | Cod sursa (job #2130838) | Cod sursa (job #757336) | Cod sursa (job #1785629)
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
#define NMAX 100001
#define SMAX 317
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int A[NMAX], n, m;
int A_MIN[SMAX];
int main()
{
in >> n >> m;
for (int i = 1; i <= n; ++i)
in >> A[i];
int piece, length = sqrt(n);
for (int i = 1; i <= n; ++i)
{
piece = (i - 1)/length;
if(A_MIN[piece] == 0)
A_MIN[piece] = A[i];
else
A_MIN[piece] = min(A_MIN[piece], A[i]);
}
int x, y, minn;
for (int i = 1; i <= m; ++i)
{
in >> x >> y;
minn = A[x];
for (int j = x; j <= y; j++)
{
if ((j - 1) % length == 0 && j + length - 2 <= y)
{
minn = min(minn, A_MIN[(j - 1)/length]);
j += (length - 1);
}
else
minn = min(minn, A[j]);
}
out << minn << "\n";
}
in.close();
out.close();
return 0;
}