Cod sursa(job #566792)

Utilizator irene_mFMI Irina Iancu irene_m Data 29 martie 2011 12:09:55
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#define infile "rmq.in"
#define outfile "rmq.out"
#define MaxN 100005
#define LogMaxN 20

int rmq[MaxN][LogMaxN],lg[MaxN];
int N,M,k,i,j;

int main()
{
      freopen(infile,"r",stdin);
      freopen(outfile,"w",stdout);

      scanf("%d%d",&N,&M);

      for(i=0;i<N;i++)
            scanf("%d",&rmq[i][0]);

      for(i=2;i<=N;i++)
            lg[i]=lg[i/2]+1;

      for(j=1; (1<<j)<=N; j++)
            for(i=0; i+(1<<j)<=N;i++)
                  if(rmq[i][j-1]<=rmq[i+(1<<(j-1))][j-1])
                        rmq[i][j]=rmq[i][j-1];
                  else
                        rmq[i][j]=rmq[i+(1<<(j-1))][j-1];

      for(;M;M--)
      {
            scanf("%d%d",&i,&j);
            k=lg[j-i+1];
            if(rmq[i][k]<=rmq[j-(1<<k)][k])
                  printf("%d\n",rmq[i][k]);
            else
                  printf("%d\n",rmq[j-(1<<k)][k]);
      }

      fclose(stdin);
      fclose(stdout);
      return 0;
}