Pagini recente » Cod sursa (job #2642889) | Cod sursa (job #2329037) | Cod sursa (job #1313518) | Cod sursa (job #464232) | Cod sursa (job #2575211)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, q, lInt, nrInt;
int v[100001], interv[330];
int main() {
fin >> n >> q;
lInt = sqrt(n);
nrInt = n / lInt + (bool)(n % lInt);
for (int i = 1; i <= n; i++)
fin >> v[i];
for (int j = 1; j <= nrInt; j++) {
interv[j] = 2000000000;
for (int h = lInt * (j - 1) + 1; h <= lInt * j; h++)
interv[j] = min(interv[j], v[h]);
}
while (q--) {
int a, b;
int intIn, intSf, minim = 2000000000;
fin >> a >> b;
int j = 1;
while (lInt * j < a)
j++;
for (int h = a; h <= lInt * j && h <= b; h++)
minim = min(minim, v[h]);
j++;
for (; lInt * j <= b; j++)
minim = min(minim, interv[j]);
j--;
for (int h = j * lInt + 1; h <= b; h++)
minim = min(minim, v[h]);
fout << minim << '\n';
}
return 0;
}