Pagini recente » Cod sursa (job #2856085) | Cod sursa (job #797097) | Cod sursa (job #951254) | Cod sursa (job #1998592) | Cod sursa (job #1897670)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define N 100005
using namespace std;
int n, m, mat[N][20], lg_n;
void prelucrare()
{
int tmp;
for(int j = 1 ; j <= lg_n ; ++j)
{
for(int i = 0 ; i < n ; ++i)
{
tmp = i + (1 << (j - 1));
if(tmp < n)
{
mat[i][j] = min(mat[i][j - 1] , mat[tmp][j - 1]);
}
else
{
mat[i][j] = mat[i][j - 1];
}
}
}
}
void afisare()
{
for(int i = 0 ; i < n ; ++i)
{
for(int j = 0 ; j <= lg_n ; ++j)
{
printf("%d ",mat[i][j]);
}
printf("\n");
}
}
void citire()
{
scanf("%d %d\n",&n,&m);
lg_n = log2(n);
for(int i = 0 ; i < n ; ++i)
{
scanf("%d\n",&mat[i][0]);
}
prelucrare();
//afisare();
int x, y, j;
for(int i = 0 ; i < m ; ++i)
{
scanf("%d %d\n", &x , &y);
x--;
y--;
j = log2(y - x + 1);
printf("%d\n",min(mat[x][j] , mat[y - (1 << j) + 1][j]));
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
citire();
return 0;
}