Pagini recente » Cod sursa (job #2101668) | Cod sursa (job #633440) | Cod sursa (job #1596502) | Cod sursa (job #378114) | Cod sursa (job #743283)
Cod sursa(job #743283)
#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;
}
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]);
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] );
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;
}