Pagini recente » Cod sursa (job #1803766) | Cod sursa (job #1841043) | Cod sursa (job #1183767) | Cod sursa (job #752206) | Cod sursa (job #2821725)
#include <fstream>
#include <cstring>
#define NMAX 100005
#define sq 360
#define NR_MAX 1000005
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
int n, m, i, j, a, b;
int v[NMAX];
int batog[360];
void setIO()
{
ios_base::sync_with_stdio(false);
in.tie(NULL);
out.tie(NULL);
}
int query(int a, int b)
{
int rez = NR_MAX;
int firstinterval = (a + sq - 1) / sq * sq;
int lastinterval = b / sq * sq;
while (a <= b && a < firstinterval)
rez = min(rez, v[a++]);
while (a <= b && b >= lastinterval)
rez = min(rez, v[b--]);
firstinterval = firstinterval / sq;
lastinterval = lastinterval / sq;
while (firstinterval < lastinterval)
rez = min(rez, batog[firstinterval++]);
return rez;
}
int main()
{
setIO();
in >> n >> m;
memset(batog, NR_MAX, sizeof(batog));
for (i = 0; i < n; ++i)
{
in >> v[i];
batog[i / sq] = min(batog[i / sq], v[i]);
}
for (i = 1; i <= m; ++i)
{
in >> a >> b;
out << query(a - 1, b - 1) << '\n';
}
return 0;
}