Pagini recente » Cod sursa (job #99233) | Istoria paginii utilizator/bog287 | Cod sursa (job #2751612)
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int main()
{
int N, i, j, M;
f >> N >> M;
int v[105], rmq[1005][12];
for (i = 0; i < N; ++i)
f >> v[i];
for (i = 0; i < N; ++i)
rmq[i][0] = i;
for (j = 1; (1 << j) <= N; j++)
for (i = 0; i + (1 << j) - 1 < N; ++i)
if (v[rmq[i][j - 1]] < v[rmq[i + (1 << (j - 1))][j - 1]])
rmq[i][j] = rmq[i][j - 1];
else
rmq[i][j] = rmq[i + (1 << (j - 1))][j - 1];
int a, b, k;
for(i = 0; i < M; ++i)
{
int k = 0;
f >> a >> b;
--a;
--b;
int smk = b - a + 1;
while ((1 << k) < smk)
++k;
if (1 << k > smk)
--k;
cout << min(v[rmq[a][k]], v[rmq[b - (1 << k) + 1][k]]) << "\n";
}
return 0;
}