Cod sursa(job #1044126)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 29 noiembrie 2013 12:42:08
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int RMQ[21][100001];
int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");
    int n,m,i,j,l,h,x,y;
    f>>n>>m;
    for(i=1;i<=n;i++)
      f>>RMQ[0][i];
    for(l=1;(1<<l)<=n;++l)
       for(i=1;i<=n;++i)
          {
              if(i+(1<<l)<=n+1)
              { RMQ[l][i]=RMQ[l-1][i];
                if(RMQ[l-1][i+(1<<(l-1))]<RMQ[l][i])
                   RMQ[l][i]=RMQ[l-1][i+(1<<(l-1))]; }
          }
    for(i=1;i<=m;++i)
       {
           f>>x>>y;
           h=(int)log2(y-x+1);
           if(RMQ[h][x]<RMQ[h][y-(1<<h)+1])
              g<<RMQ[h][x]<<'\n';
              else
              g<<RMQ[h][y-(1<<h)+1]<<'\n';
       }
    f.close();
    g.close();
    return 0;
}