Cod sursa(job #159397)

Utilizator MciprianMMciprianM MciprianM Data 14 martie 2008 09:15:48
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<fstream>
#include<math.h>
using namespace std;
int n,m;
int a[100001], r[50][100001], lg[100001];

inline int min(int x, int y){
  return x<y?x:y;
}

int main(){
  int i, j, st, dr;
  ifstream f("rmq.in");
  f>>n>>m;
  for(i=0;i<n;i++)
    f>>a[i];
  lg[1]=0;
  for(i=2;i<=n;i++)
    lg[i]=lg[i/2]+1;
  for(i=0;i<n-1;i++)
    r[0][i]=min(a[i],a[i+1]);
  int c=1;
  for(j=1;j<=lg[n]+1;j++){
    c<<=1;
    for(i=0;i<n-c;i++)
      r[j][i]=min(r[j-1][i],r[j-1][i+(c>>1)]);
  }
  ofstream g("rmq.out");
  for(i=0;i<m;i++){
    f>>st>>dr;
    st--;dr--;
    g<<min(r[lg[dr-st]][st], r[lg[dr-st]][(int)(dr-pow(2,lg[dr-st]))])<<'\n';
  }
  g.close();
  f.close();
  return 0;
}