Pagini recente » Cod sursa (job #5700) | Cod sursa (job #728370) | Cod sursa (job #810490) | Borderou de evaluare (job #2844265) | Cod sursa (job #2833982)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define DIM 100005
int rmq[20][DIM];
int N, M;
int main() {
fin >> N >> M;
for(int i = 1; i <= N; i++) {
fin >> rmq[0][i];
}
for(int exp = 1, lungime = 2; lungime <= N; lungime *= 2, exp++) {
for(int i = lungime; i <= N; i++) {
rmq[exp][i] = min(rmq[exp - 1][i - lungime / 2],
rmq[exp - 1][i]);
}
}
int x, y;
while(M--) {
fin >> x >> y;
if(x > y) swap(x, y);
int put = 1, e = 0;
while(put <= y - x + 1) put *= 2, e++;
put /= 2, e--;
fout << min(rmq[e][x + put - 1], rmq[e][y]) << '\n';
}
return 0;
}