Cod sursa(job #2375703)

Utilizator vlad.ulmeanu30Ulmeanu Vlad vlad.ulmeanu30 Data 8 martie 2019 11:37:28
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
#define maxn 100000
#define maxl2 17

using namespace std;

int dp[maxl2+5][maxn+5], v[maxn+5];

int getl2 ( int n, int pin )
{
  int l2 = log(n) / log(2);
  l2 += ((1<<l2)<n && pin);
  return l2;
}

int rmq ( int lo, int hi )
{
  int e2 = getl2 (hi-lo+1,0);
  return min ( dp[e2][lo], dp[e2][hi-(1<<e2)+1] );
}

int main ()
{
  ifstream fin ( "rmq.in" );
  ofstream fout ( "rmq.out" );

  int n, m; fin >> n >> m;

  int i, j, l2 = getl2 (n,1);
  for ( i = 0; i < n; i++ ) fin >> v[i], dp[0][i] = v[i];
  for ( i = 1; i <= l2; i++ )
    for ( j = 0; j < n - (1<<i) + 1; j++ ) dp[i][j] = min ( dp[i-1][j], dp[i-1][j+(1<<(i-1))] );
  int lo, hi;
  while (m--) fin >> lo >> hi, fout << rmq (lo-1,hi-1) << '\n';

  fin.close ();
  fout.close ();

  return 0;
}