Cod sursa(job #1148097)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 20 martie 2014 14:05:03
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <cstdio>
#include <algorithm>

int n,i,j,d[20][100010],k,pp,m,x,y,lg[100010];

using namespace std;

void rmq()
 {
     for (i=1;i<=lg[n];++i)
      for (j=1;j<=n-(1<<(i-1));++j)
      d[i][j]=min(d[i-1][j], d[i-1][j+(1<<(i-1))]);
 }

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", &d[0][i]);

    lg[1]=0;
    for (i=2;i<=n;i++) lg[i]=lg[i/2]+1;
    rmq();

    for (i=1;i<=m;++i)
     {
         scanf("%d %d", &x, &y);
         k=lg[y-x+1];

         printf("%d\n", min(d[k][x], d[k][y-(1<<k)+1]));
     }

    return 0;
}