Cod sursa(job #3156971)

Utilizator Mihai00700Mihai Ghetu Mihai00700 Data 13 octombrie 2023 22:03:27
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#define NMAX 100000
#define LOG 17
using namespace std;
int lg[NMAX],s[NMAX][LOG];

int query(int i, int j){
  int lun = j - i + 1;
  int k = lg[lun];
  return min(s[i][k], s[j -(1<<k)+1][k]);
}
int main(){
  int n, m, i, j, st, dr, k;
  ifstream cin("rmq.in");
  cin>>n>>m;
  lg[1] = 0;
  for(int i = 2;i<=n;i++){
    lg[i] = 1 + lg[i / 2];
  }
  for(i = 0;i<n;i++){
    cin>>s[i][0];
  }
  for(j = 1;j<=LOG;j++){
    for(i = 0;(i + (1<<j)) - 1 < n;i++){
      s[i][j] = min(s[i][j - 1], s[i + (1<<(j - 1))][j - 1]);
    }
  }
  ofstream cout("rmq.out");
  for(i = 0;i<m;i++){
    cin>>st>>dr;
    cout<<query(st - 1, dr - 1)<<"\n";
  }
  cin.close();
  cout.close();
  return 0;
}