Cod sursa(job #304791)

Utilizator tibiletsKoos Tiberiu Iosif tibilets Data 15 aprilie 2009 13:13:00
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.53 kb
#include<fstream.h>
#include<math.h>
int m[100001][18],N,M,x,y,A[100001],i,j,k,p;
int main()
{ifstream f("rmq.in");
ofstream g("rmq.out");
f>>N>>M;
for(;i<N;++i)
 f>>A[i];
for(i=0;i<N;++i)
 m[i][0]=i;
for(j=1;1<<j<=N;++j)
{k=1<<j-1;
 for(i=0;i+2*k-1<N;++i)
  if(A[m[i][j-1]]<A[m[i+k][j-1]])
   m[i][j]=m[i][j-1];
  else
   m[i][j]=m[i+k][j-1];
}  
for(;M;--M)
{f>>x>>y;--x;--y;
 k=log(y-x+1)/log(2);
 p=1<<k;
 if(A[m[x][k]]<=A[m[y-p+1][k]])
  g<<A[m[x][k]]<<'\n';
 else
  g<<A[m[y-p+1][k]]<<'\n';
}	
return 0;
}