Pagini recente » Cod sursa (job #115797) | Cod sursa (job #2190188) | Cod sursa (job #743291) | Cod sursa (job #2706481) | Cod sursa (job #743286)
Cod sursa(job #743286)
#include <stdio.h>
#include <vector>
using namespace std;
#define NMAX 100002
#define LMAX 18
#define Li long int
#define min(a,b) ( (a<b) ? a : b )
Li rmq[LMAX][NMAX];
Li N,Q;
Li lg[NMAX],A[NMAX];
Li x,y,diff,sh,l,Sol;
void loog()
{
lg[1]=0;
for (Li i=2;i<=N;++i)
lg[i]=lg[i/2]+1;
}
void make()
{
for (Li i=1;i<=N;++i)
rmq[0][i]=A[i];
for (Li i=1; (1 << i) <=N;++i)
for (Li j=1;j <= N - (1 << i)+1;++j)
l=1<<(i-1), rmq[i][j]= min( rmq[i-1][j] , rmq[i-1][j+l] );
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%ld %ld",&N,&Q);
for (Li i=1;i<=N;++i)
scanf("%ld ",&A[i]);
loog();
make();
for (Li i=1;i<=Q;i++)
{
scanf("%ld %ld",&x,&y);
diff=y-x+1;
l=lg[diff];
sh=diff - (1<<l);
Sol=min(rmq[l][x],rmq[l][x+sh]);
printf("%ld\n",Sol);
}
return 0;
}