Cod sursa(job #2748609)

Utilizator AlexNicuNicu Alexandru AlexNicu Data 1 mai 2021 20:29:58
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>

using namespace std;

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

#define NMAX 100000
#define MAXLOG 17

int logg2[NMAX + 1], r[NMAX + 1][MAXLOG];

int main() {
    int n, m, i, j, a, b;
    cin >> n >> m;
    for ( i = 1; i <= n; i++ ) {
      cin >> r[i][0];
    }
    for ( i = 1; i <= n; i++ ) {
    	logg2[i] = logg2[i / 2] + 1;
    }
    for ( j = 1; j <= logg2[n]; j++ ) {
			for ( i = ( 1 << ( j - 1 ) ) + 1; i <= n; i++ ) {
          r[i][j] = min ( r[i - ( 1 << ( j - 1 ) )][j - 1], r[i][j - 1] );
			}
    }
    for ( i = 1; i <= m; i++ ) {
		   cin >> a >> b;
		   j = logg2[b - a + 1] - 1;
		   cout << min ( r[a + ( 1 << j ) - 1][j], r[b][j] ) << "\n";
    }
    return 0;
}