Cod sursa(job #954169)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 28 mai 2013 15:28:39
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
// 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;
}