Pagini recente » Cod sursa (job #653513) | Cod sursa (job #2368181) | Cod sursa (job #2805938) | Cod sursa (job #1605927) | Cod sursa (job #1785645)
#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 length = sqrt(n);
int L = length;
if((double) L < sqrt(n))
L++;
for (int i = 0; i < L; ++i)
A_MIN[i] = NMAX;
for (int i = 1; i <= n; ++i)
A_MIN[(i - 1) / length] = min(A_MIN[(i - 1) / length], 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 - 1 <= 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;
}