Pagini recente » Cod sursa (job #634150) | Cod sursa (job #529766) | Cod sursa (job #1087538) | Cod sursa (job #2687470) | Cod sursa (job #2059218)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
const int NMAX = 100005;
int lg[18], rmq[NMAX][18], v[NMAX];
// 0 1 2 3 4 5 6 7 8 9 10 11
int main()
{
int n, m;
fin >> n >> m;
for (int i=1; i<=n; i++) {
fin >> v[i];
rmq[i][0] = v[i];
}
lg[1] = 0;
for (int i=2; i<=n; i++) lg[i] = lg[i/2] + 1;
for (int i=1; 1<<i <= n; i++) {
for (int j=1; j <= n - (1 << i) + 1; j++) {
if (rmq[j][i-1] <= rmq[j + (1 << (i-1)) ][i-1])
rmq[j][i] = rmq[j][i-1];
else
rmq[j][i] = rmq[j + (1 << (i-1)) ][i-1];
}
}
for (int i=1; i<=m; i++) {
int x, y;
fin >> x >> y;
int dif = y-x+1;
dif = lg[dif];
if (rmq[x][dif] <= rmq[y-(1<<dif)+1][dif])
fout << rmq[x][dif] << '\n';
else
fout << rmq[y-(1<<dif)+1][dif] << '\n';
}
return 0;
}