Pagini recente » Cod sursa (job #1476864) | Cod sursa (job #1215034) | Cod sursa (job #1403891) | Cod sursa (job #1229829) | Cod sursa (job #1900327)
#include <cstdio>
#include <algorithm>
#include <cmath>
#define Nmax 100003
using namespace std;
int rmq[Nmax][19];
int n,m;
void read()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i = 0 ; i < n ; i++)
scanf("%d",&rmq[i][0]);
}
void RMQ()
{
int lim = floor(log2(n));
for(int j = 1 ; j <= lim ; ++j)
{
for(int i = 0 ; i < n ; ++i)
{
int power = i + (1 << (j - 1));
if( power < n)
rmq[i][j] = min(rmq[i][j-1],rmq[power][j-1]);
else
rmq[i][j] = rmq[i][j-1];
}
}
}
void intrebari()
{
int x ,y;
for(int i = 0 ; i < m ; ++i)
{
scanf("%d %d",&x,&y);
x--;
y--;
int ind =(int)log2(y-x+1);
int raspuns = min(rmq[x][ind],rmq[y - ( 1 << ind ) + 1][ind]);
printf("%d\n",raspuns);
}
}
int main()
{
read();
RMQ();
intrebari();
return 0;
}