Pagini recente » Borderou de evaluare (job #2420305) | Borderou de evaluare (job #2417072) | Cod sursa (job #862501) | Borderou de evaluare (job #2052206) | Cod sursa (job #2771403)
#include <bits/stdc++.h>
using namespace std;
const int mxN = 1e5 + 5, mxLog = 17;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int dp[mxN][mxLog], Log[mxN];
void query(int x, int y) {
int length = y - x + 1;
fout << min(dp[x][Log[length]], dp[y - (1 << (Log[length])) + 1][Log[length]]) << '\n';
}
int main() {
fin.tie(0)->sync_with_stdio(0);
int n, m; fin >> n >> m;
for (int i = 1; i <= n; ++i) {
fin >> dp[i][0];
}
for (int i = 2; i <= n; ++i) {
Log[i] = Log[i / 2] + 1;
}
for (int k = 1; k < mxLog; ++k) {
for (int i = 1; i + (1 << k) - 1 <= n; ++i) {
dp[i][k] = min(dp[i][k - 1], dp[i + (1 << (k - 1))][k - 1]);
}
}
while (m--) {
int x, y; fin >> x >> y;
query(x, y);
}
return 0;
}