Cod sursa(job #2452250)

Utilizator Tudor06MusatTudor Tudor06 Data 30 august 2019 09:29:08
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int a[18][1000000];

int min( int a, int b ) {
  if ( a > b )
    return b;
  else
    return a;
}
int log( int x ) {
  int c = 0;
  while ( 1 << c <= x ) {
    c ++;
  }
  c --;
  return c;
}

int main() {
  FILE *fin = fopen( "rmq.in", "r" ), *fout = fopen( "rmq.out", "w" );
  int n, i, j, m, b, c, i2;
  fscanf( fin, "%d%d", &n, &m );
  for ( i = 0; i < n; i ++ ) {
    fscanf( fin, "%d", &a[0][i] );
  }
  for ( i = 1; i < log( n ) + 1; i ++ ) {
    for ( j = 0; j < n - ( 1 << i ) + 1; j ++ ) {
      a[i][j] = min( a[i - 1][j], a[i - 1][j + ( 1 << ( i - 1 ) )] );
    }
  }
  for ( i2 = 0; i2 < m; i2 ++ ) {
    fscanf( fin, "%d%d", &b, &c );
    b --;
    c --;
    i = log( c - b + 1 );
    fprintf( fout, "%d\n", min( a[i][b], a[i][c - ( 1 << i )] ) );
  }
  fclose( fin );
  fclose( fout );
  return 0;
}