Cod sursa(job #2241423)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 15 septembrie 2018 19:53:12
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#define NMAX 100002
#define LMAX 18
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int a[NMAX],lg[NMAX];
int sparse[NMAX][LMAX];
int N,M;

int main()
{
    fin>>N>>M;
    for(int i = 0 ; i < N; i++)
        fin>>a[i];

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

        for(int i = 0 ; i < N; i++)
            sparse[i][0]=a[i];

        for(int j = 1; (1<<j) < N; j++)
        {
          for(int i = 0 ;i <= N-(1<<j); i++)
          {
             sparse[i][j]=min(sparse[i][j-1],sparse[i+(1<<(j-1))][j-1]);
          }
        }
      long int k,diff,low,high;
      for(int i = 1; i <= M; i++)
      {
          fin>>low>>high;
          low--;
          high--;
          diff=high-low+1;
          k=lg[diff];
          fout<<min(sparse[low][k],sparse[high-(1<<(k)) +1 ][k])<<'\n';
      }

    return 0;
}