Pagini recente » Cod sursa (job #2489502) | Cod sursa (job #3220160) | Cod sursa (job #56798) | Cod sursa (job #1188188) | Cod sursa (job #2836471)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, m, st, dr, i, e, j, a[20][100010], L[100010];
int main()
{
cin >> n >> m;
for (i = 1; i <= n; i++)
cin >> a[0][i];
for (e = 1; (1 << e) <= n; e++)
{
for (i = 1; i <= n; i++)
{
a[e][i] = a[e - 1][i];
j = i + (1 << (e - 1));
if (j <= n && a[e][i] > a[e - 1][j])
a[e][i] = a[e - 1][j];
}
}
L[1] = 0;
for (i = 2; i <= n; i++)
{
L[i] = L[i / 2] + 1;
}
for (i = 1; i <= m; i++)
{
cin >> st >> dr;
e = L[dr - st + 1];
dr = dr - (1 << e) + 1;
cout << min(a[e][st], a[e][dr]) << "\n";
}
return 0;
}