Cod sursa(job #276475)

Utilizator zbarniZajzon Barna zbarni Data 11 martie 2009 10:39:44
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<fstream.h>
#define nx 100005
#define lx 19
#define min(x,y) ((x)<(y)?(x):(y))
long n,m,a[nx],rmq[lx][nx];

int main()
 {
  ifstream be ("rmq.in");
  ofstream ki ("rmq.out");
  long i,j,lg[nx]={0},x,y,diff,s,l;
  be>>n>>m;
  for (i=1;i<=n;++i)
    be>>a[i];
  lg[1]=0;

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

  for (i=1;i<=n;++i)
    rmq[0][i]=a[i];

  for (i=1;(1<<i)<=n;++i)
   for (j=1;j<=n-(1<<i)+1;++j)
     rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+1]);
  for (;m;--m)
   {
    be>>x>>y;
    diff=y-x+1;
    l=lg[diff];
    s=diff-(1<<l);
    ki<<min(rmq[l][x],rmq[l][x+s])<<"\n";
   }
  be.close();
  ki.close();
  return 0;
 }