Pagini recente » Cod sursa (job #23561) | Rezultatele filtrării | Monitorul de evaluare | Borderou de evaluare (job #2435935) | Cod sursa (job #1752551)
#include <fstream>
int d[100001][20];
int arr[100001];
int lg[100001];
int main()
{
std::ifstream mama("rmq.in");
std::ofstream tata("rmq.out");
int n;
int m;
int i;
int j;
int k;
int temp;
mama >> n >> m;
for (i = 1; i <= n; ++i)
{
mama >> arr[i];
}
for (i = 1; i <= n; ++i)
{
d[i][0] = arr[i];
}
lg[1] = 0;
for (i = 2; i <= n; ++i)
{
lg[i] = lg[i >> 1] + 1;
}
for (i = 1; (1 << i) <= n; ++i)
{
for (j = 1; j <= n; ++j)
{
if (i + j > n)
{
break;
}
d[j][i] = std::min(d[j][i - 1],
d[j + (1 << (i - 1))][i - 1]);
}
}
for (k = 0; k < m; ++k)
{
mama >> i >> j;
temp = j - i + 1;
tata << std::min(d[i][lg[temp]],
d[j - (1 << lg[temp]) + 1][lg[temp]]) << '\n';
}
}