Cod sursa(job #774657)

Utilizator ion824Ion Ureche ion824 Data 6 august 2012 12:37:13
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<fstream>
#include<algorithm>
using namespace std;
const int NM=100005;
int a[NM],lg[NM],rmq[20][NM],N,M;

int main(void){
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    int i,j,l,x,aux;
    fin>>N>>M;
    for(i=1;i<=N;++i)fin>>a[i];
    
    for(i=1;i<=N;++i)rmq[0][i]=a[i];
 
    for(i=2;i<=N;++i)lg[i]=lg[i>>1]+1;
    
    for(i=1;(1<<i)<=N;++i)
      for(j=1;j+(1<<i)-1<=N;++j)
       {
        x=1<<(i-1);
        rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+x]);                         
       }
           
    while(M--)
    {
     fin>>i>>j;
     x=j-i+1; 
     l=lg[x];
     aux=x-(1<<l);     
     fout<<min(rmq[l][i],rmq[l][i+aux])<<'\n';
    }

return 0;
}