Pagini recente » Profil BlueLuca888 | Istoria paginii preoni-2008/runda-finala/probleme | Diferente pentru utilizator/anna_bozianu intre reviziile 10 si 15 | Rating Diamandi Matei (MateiAlex24) | Cod sursa (job #156249)
Cod sursa(job #156249)
#include <stdio.h>
const int nmax = 100100;
const int log = 18;
int c[log][nmax], l[nmax];
inline int min(int a, int b)
{
if(a < b)
return a;
return b;
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int n, m, i, j, a, b, cnt, step, sol;
scanf("%d %d", &n, &m);
for(i = 1; i <= n; ++i)
{
scanf("%d", &c[0][i]);
}
l[1] = 0;
for(i = 2; i <= nmax; ++i)
{
l[i] = l[i / 2] + 1;
}
for(step = 1, cnt = 1; cnt <= n; ++step, cnt <<= 1)
{
// printf("%d\n", step);
for(i = 1; i <= n; ++i)
{
c[step][i] = min(c[step - 1][i], c[step - 1][i + cnt]);
// printf("%d ", c[step][i]);
}
//printf("\n");
}
for(i = 1; i <= m; ++i)
{
scanf("%d %d", &a, &b);
sol = min(c[l[b - a + 1]][a], c[l[b - a + 1]][b - (1 << l[b - a + 1]) + 1]);
printf("%d\n", sol);
}
return 0;
}