Pagini recente » Cod sursa (job #273569) | testeu | Cod sursa (job #1587048) | Cod sursa (job #2325849) | Cod sursa (job #2211532)
#include<iostream>
#include<fstream>
#include "math.h"
using namespace std;
ifstream fi("rmq.in");
ofstream fo("rmq.out");
int *dp[20];
int main() {
int n, m, x, y;
int *v;
fi >> n >> m;
v = (int *) malloc (n * sizeof(int));
for (int i = 0; i < 20; i++) {
dp[i] = (int *) malloc (n * sizeof(int));
}
for (int i = 0; i < n; i++) {
fi >> v[i];
dp[0][i] = v[i];
}
for (int j = 1; (1 << j) <= n; j++) {
for (int i = 0; i + (1<<j) - 1 < n; i++) {
if (dp[j - 1][i] < dp[j - 1][i + (1<<(j - 1))])
dp[j][i] = dp[j - 1][i];
else
dp[j][i] = dp[j - 1][i + (1 << (j - 1))];
}
}
int k;
for (int i = 0; i < m; i++) {
fi >> x >> y;
x--;
y--;
k = (int)log2(y - x + 1);
if (dp[k][x] <= dp[k][y - (1 << k)+1])
fo << dp[k][x] << '\n';
else
fo << dp[k][y - (1 << k) + 1] << '\n';
}
fi.close();
fo.close();
return 0;
}