Cod sursa(job #2369251)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 5 martie 2019 21:56:19
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>

#define MAXN 100000

using namespace std;

ifstream cin( "rmq.in" );
ofstream cout( "rmq.out" );

int rmq[MAXN+5][20]; // rmq[i][j] = minimul din intervalul (i,i+2^j-1)
int log2[MAXN+5];

int main()
{
  int n, m;

  cin>>n>>m;

  for( int i=1;i<=n;i++ )
    cin>>rmq[i][0];

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

  for( int j=1;(1<<j)<=n;j++ )
    for( int i=1;i<=n-(1<<j)+1;i++ )
    {
      int l=(1<<(j-1));

      rmq[i][j]=min(rmq[i][j-1],rmq[i+l][j-1]);
    }

  while( m-- )
  {
    int x, y;

    cin>>x>>y;

    int l=log2[y-x+1];

    cout<<min(rmq[x][l],rmq[y-(1<<l)+1][l])<<"\n";
  }

  return 0;
}