Pagini recente » Cod sursa (job #152054) | Cod sursa (job #2571344) | Cod sursa (job #1194940) | Cod sursa (job #995969) | Cod sursa (job #1897714)
#include <cstdio>
#include <cmath>
#include <algorithm>
#define Nmax 100003
using namespace std;
int n,m,lim;
int rmq[Nmax][20];
void read()
{
for(int i = 0 ; i < n ; i++)
scanf("%d",&rmq[i][0]);
}
void rezolv()
{
for(int j = 1 ; j <=lim ; j++)
{
int put = (1 << (j-1));
for(int i = 0 ; i < n ; i++)
{
if(i + put < n)
rmq[i][j] = min(rmq[i][j-1],rmq[i+put][j-1]);
else
rmq[i][j] = rmq[i][j-1];
}
}
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
lim = floor(log2(n));
read();
rezolv();
int x,y;
for(int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j <= lim ; j++)
printf("%d ",rmq[i][j]);
printf("\n");
}
for(int i = 0 ; i < m ; i++)
{
scanf("%d %d",&x,&y);
x--;
y--;
int j = int(log2(y-x+1));
lim = min(rmq[x][j],rmq[y-(1 << (j-1))+1][j]);
printf("%d\n",lim);
}
return 0;
}