Pagini recente » Cod sursa (job #1726113) | Cod sursa (job #697580) | Cod sursa (job #2465424) | Cod sursa (job #2914982) | Cod sursa (job #3133589)
#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;
int rmq[100000][17], n, m;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
void read() {
for (int i = 0; i < n; i++) {
fin >> rmq[i][0];
}
}
void RMQ() {
for (int i = 1; i <= int(log2(n)); i++) {
for (int j = 0; j < n - int(pow(2, i - 1)); j++) {
int fhalf = rmq[j][i - 1], shalf = rmq[j + int(pow(2, i - 1))][i - 1];
if (fhalf < shalf) {
rmq[j][i] = fhalf;
}
else {
rmq[j][i] = shalf;
}
}
}
}
int query(int f, int l) {
int len = l - f + 1;
int index = int(log2(len));
int fnum = rmq[f][index], sum = rmq[l - int(pow(2, index)) + 1][index];
if (fnum < sum) {
return fnum;
}
return sum;
}
int main() {
int a, b;
fin >> n >> m;
read();
RMQ();
for (int i = 0; i < m; i++) {
fin >> a >> b;
a--;
b--;
fout << query(a, b) << endl;
}
fin.close();
fout.close();
}