Cod sursa(job #2133563)

Utilizator CozmaCatalinCozma Catalin CozmaCatalin Data 17 februarie 2018 10:04:37
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

const int MAX = 100005;
const int MAX2 = 25;

int Matrix[MAX2][MAX];
int lg[MAX];

int N,M,x,y;

int main()
{
    freopen("rmq.in", "r" ,stdin);
    freopen("rmq.out" , "w" , stdout);

    scanf("%d%d" ,&N , &M);

    lg[1] = 0;

    for ( int i = 2 ; i <= N ; ++i)
        lg[i] = lg[i/2]+1;

    for ( int i = 1; i <= N ; ++i)
    {
        scanf("%d", &Matrix[0][i]);
    }

  for ( int i = 1; i <= lg[N] ; ++i)
    {
      for ( int j = 1; j <= N - (1 << (i-1)) ; ++j)
      {
          Matrix[i][j] = min(Matrix[i-1][j] , Matrix[i-1][j+(1<<(i-1))]);
      }
    }


 for ( int i = 1; i <= M ; ++i)
 {
     scanf("%d%d" , &x , &y);

     int k  = lg[y-x+1];


     printf("%d\n" ,min(Matrix[k][x] , Matrix[k][y- (1 << k) +1]));
 }

}