Pagini recente » Cod sursa (job #70476) | Cod sursa (job #2088177) | Cod sursa (job #872665) | Cod sursa (job #1340214) | Cod sursa (job #2916427)
#define MAX_N 100000
#define BUCKET_SIZE 317
#define GET_BUCKET(index) (((index) / BUCKET_SIZE) + (((index) % BUCKET_SIZE) != 0))
#define GET_BUCKET_LEFT(index) (((GET_BUCKET(index) - 1) * BUCKET_SIZE) + 1)
#define GET_BUCKET_RIGHT(index) min(n, (GET_BUCKET(index) * BUCKET_SIZE))
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m, a[MAX_N + 1], b[GET_BUCKET(MAX_N) + 1];
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; ++i)
fin >> a[i];
for (int i = 1; i <= n; ++i)
if (i == GET_BUCKET_LEFT(i))
b[GET_BUCKET(i)] = a[i];
else
b[GET_BUCKET(i)] = min(b[GET_BUCKET(i)], a[i]);
for (int i = 1; i <= m; ++i)
{
int x, y, z;
fin >> x >> y;
z = a[x];
if (GET_BUCKET(x) == GET_BUCKET(y))
for (int i = x + 1; i <= y; ++i)
z = min(z, a[i]);
else
{
for (int i = x + 1; i <= GET_BUCKET_RIGHT(x); ++i)
z = min(z, a[i]);
for (int i = GET_BUCKET(x) + 1; i < GET_BUCKET(y); ++i)
z = min(z, b[i]);
for (int i = GET_BUCKET_LEFT(y); i <= y; ++i)
z = min(z, a[i]);
}
fout << z << '\n';
}
fin.close();
fout.close();
return 0;
}