Pagini recente » Cod sursa (job #231301) | Cod sursa (job #1733933) | Cod sursa (job #2826802) | Cod sursa (job #1517547) | Cod sursa (job #2840693)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int rmq[21][100001], n, m, r1, r2, r, lg, x, y;
void fabricare()
{
int i, j;
for(i = 1, lg = 2; lg <= n; i++, lg *= 2)
{
for(j = 1; j + lg - 1 <= n; j++)
{
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (lg / 2)]);
}
}
}
int main()
{
int i, j;
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>rmq[0][i];
fabricare();
for(i=1;i<=m;i++)
{
fin>>x>>y;
lg = 1;
j = 0;
while(lg <= y - x + 1)
{
lg *= 2;
j++;
}
j--;
lg /= 2;
r1 = rmq[j][x];
r2 = rmq[j][y - lg + 1];
r = min(r1, r2);
fout << r << '\n';
}
return 0;
}