Pagini recente » Cod sursa (job #57014) | Cod sursa (job #972219) | Cod sursa (job #3160380) | Cod sursa (job #1229938) | Cod sursa (job #954169)
Cod sursa(job #954169)
// DP[i][j] = minimul pe intervalul (j,j+2^i-1);
#include<cstdio>
#include<algorithm>
using namespace std;
const int LOGMAX = 18;
const int NMAX = 100005;
int N,M,i,j,p,P,X,Y,DP[LOGMAX][NMAX];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d%d",&N,&M);
for(i=1;i<=N;i++) scanf("%d",&DP[0][i]);
for(p=1,P=2,i=1;P<=N;i++,p<<=1,P<<=1)
for(j=1;j<=N-P+1;j++)
DP[i][j]=min(DP[i-1][j],DP[i-1][j+p]);
for(;M;M--)
{
scanf("%d%d",&X,&Y);
for(i=0,P=1;P<=Y-X+1;i++,P<<=1); i--; P>>=1;
printf("%d\n",min(DP[i][X],DP[i][Y-P+1]));
}
return 0;
}