Pagini recente » Cod sursa (job #3205492) | Cod sursa (job #1051001) | Cod sursa (job #2905197) | Cod sursa (job #2909565) | Cod sursa (job #1427434)
#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;
for (sqrtN = 0; sqrtN * sqrtN <= N; ++sqrtN);
--sqrtN;
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;
if (sqrtLeftIndex + 1 < sqrtRightIndex) {
for (k = sqrtLeftIndex + 1; k < sqrtRightIndex; ++k)
minn = min(minn, rmq[k]);
for (i = l; i < (sqrtLeftIndex + 1) * sqrtN; ++i)
minn = min(minn, v[i]);
for (i = sqrtRightIndex * sqrtN; i <= r; ++i)
minn = min(minn, v[i]);
} else {
for (i = l; i <= r; ++i)
minn = min(minn, v[i]);
}
fout << minn << '\n';
}
return 0;
}