Pagini recente » Cod sursa (job #1185950) | Cod sursa (job #2455394) | Cod sursa (job #2665831) | Cod sursa (job #2683615) | Cod sursa (job #2575106)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, q, lInt;
int v[100001], interv[330];
int main() {
fin >> n >> q;
lInt = sqrt(n);
for (int i = 1; i <= lInt + 1; i++)
interv[i] = 2000000000;
for (int i = 1; i <= n; i++) {
fin >> v[i];
int coresp = i / lInt;
if (i % lInt != 0)
coresp++;
interv[coresp] = min(interv[coresp], v[i]);
}
while (q--) {
int a, b;
int intIn, intSf, minim = 2000000000;
fin >> a >> b;
if (a % lInt == 1)
intIn = a / lInt + 1;
else {
intIn = a / lInt + 1;
if (a % lInt != 0)
intIn++;
int sf = lInt * (intIn - 1); /// elemente extra in stanga
for (int i = a; i <= sf; i++)
minim = min(minim, v[i]);
}
if (b % lInt == 0)
intSf = b / lInt;
else {
intSf = b / lInt;
int in = lInt * intSf + 1; /// elemente extra in dreapta
for (int i = in; i <= b; i++)
minim = min(minim, v[i]);
}
for (int i = intIn; i <= intSf; i++) /// intervalele incluse
minim = min(minim, interv[i]);
fout << minim << '\n';
}
return 0;
}