Pagini recente » Cod sursa (job #821459) | Cod sursa (job #674428) | Cod sursa (job #731737) | Cod sursa (job #1834997) | Cod sursa (job #2903484)
#include<fstream>
#include<math.h>
using namespace std;
int a[100][100001], l, lg[100001], v[100001], n, m, i, j, k, x, y, d;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int main()
{
fin >> n >> m;
for (i = 1; i <= n; i++)
fin >> v[i];
for (i = 1; i <= n; i++)
a[0][i] = v[i];
for (k = 1; (1 << k) <= n; k++)
for (i = 1; i + (1 << k) - 1 <= n; i++)
a[k][i] = min(a[k - 1][i], a[k - 1][i + (1 << (k - 1))]);
lg[1] = 0;
for (i = 2; i <= n; i++)
lg[i] = lg[i >> 1] + 1;
for (i = 1; i <= m; i++)
{
fin >> x >> y;
d = y - x + 1;
l = lg[d];
if (a[l][x] <= a[l][x + (d-(1<<l))])
fout << a[l][x] << '\n';
else
fout << a[l][x + (d - (1 << l))] << '\n';
}
fin.close();
fout.close();
return 0;
}