Pagini recente » Cod sursa (job #3165510) | Cod sursa (job #2326653) | Cod sursa (job #1686317) | Cod sursa (job #693699) | Cod sursa (job #1104107)
#include <stdio.h>
#include <vector>
using namespace std;
const int N_MAX = 100002;
const int Log_MAX = 20;
int lg[N_MAX], v[N_MAX], n, m;
int rmq[Log_MAX][N_MAX];
void solve ()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i ++ )
scanf("%d", &v[i]);
lg[1] = 0;
for (int i = 2; i <= n; i ++ )
lg[i] = lg[i/2] + 1;
for (int i = 1; i <= n; i ++ )
rmq[0][i] = v[i];
int l;
for (int i = 1; (1 << i ) <= n; i ++ )
{
for (int j = 1; j + (1 << i ) - 1 <= n; j ++ )
{
l = 1 << (i-1);
rmq[i][j] = min ( rmq[i-1][j], rmq[i-1][j+l] );
}
}
int x, y, k;
for (int i = 1; i <= m; i ++ )
{
scanf("%d %d", &x, &y);
k = lg[y-x+1];
printf("%d\n", min( rmq[k][x], rmq[k][y-(1<<k)+1] ) );
}
}
int main()
{
solve();
return 0;
}