Pagini recente » Cod sursa (job #963794) | Cod sursa (job #2684459) | Cod sursa (job #245003) | Cod sursa (job #592847) | Cod sursa (job #1427205)
#include <fstream>
#include <cmath>
#define MaxN 100005
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int N, M, sqrtN, v[MaxN], rmq[MaxN], k, r, l;
int min(int a, int b) {
return a < b ? a : b;
}
int main() {
fin >> N >> M;
sqrtN = sqrt(N);
for (int i = 0; i < N; ++i) {
fin >> v[i];
if (i % sqrtN == 0) {
rmq[i / sqrtN] = v[i];
} else {
rmq[i / sqrtN] = min(v[i], rmq[i / sqrtN]);
}
}
for (int j = 0; j < M; ++j) {
fin >> l >> r;
--l; --r;
int minn = ~(1 << 31), i;
int sqrtLeftIndex = l / sqrtN;
int sqrtRightIndex = r / sqrtN;
for (i = l; (i - 1) % sqrtN != 0; ++i)
minn = min(minn, v[i]);
for (i = sqrtLeftIndex + 1 ; i < sqrtRightIndex; ++i)
minn = min(minn, rmq[i]);
for (i *= sqrtN; i <= r; ++i)
minn = min(minn, v[i]);
fout << minn << '\n';
}
return 0;
}