Pagini recente » Cod sursa (job #3298741) | Diferente pentru problema/base3 intre reviziile 4 si 3 | Cod sursa (job #3348847) | Diferente pentru problema/magic2 intre reviziile 8 si 5 | Cod sursa (job #3353941)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[20][100001], n, m;
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
fin >> rmq[0][i];
}
for(int i = 1, l = 2; l <= n; l *= 2, i++)
{
for(int j = l; j <= n; j++)
{
rmq[i][j] = min(rmq[i = 1][j - l / 2], rmq[i - 1][j]);
}
}
int x, y;
while(m--)
{
fin >> x >> y;
if(x > y)
{
swap(x, y);
}
int p = 1, e = 0;
while(p <= y - x + 1)
{
p *= 2, e++;
}
p /= 2, e--;
fout << min(rmq[e][x + p - 1], rmq[e][y]) << '\n';
}
}