Cod sursa(job #1333418)

Utilizator rebound212Mihnea Savu rebound212 Data 3 februarie 2015 09:29:15
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int d[18][100001],x,y,i,j,n,m,z,lg[100001];
int main()
{

    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    lg[1]=0;
    scanf("%d %d",&n,&m);
    for (i=2;i<=n;i++)
        {lg[i]=lg[i/2]+1;}

     for(i=1;i<=n;i++)
           scanf("%d",&d[0][i]);
     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))]);


   for(i=1;i<=m;i++)
   {   scanf("%d %d",&x,&y);
       z=lg[y-x+1];
    printf("%d\n",min(d[z][x],d[z][y-(1<<z)+1]));
   }
    return 0;
}