Cod sursa(job #3224874)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 16 aprilie 2024 13:47:47
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
#define MAXN 100000
#define LOGN 17
#define DEBUG 0

using namespace std;

int v[MAXN], rmq[MAXN][LOGN];

int main(){
  int n, q;

  ifstream fin ("rmq.in");
  fin >> n >> q;
  for(int i = 0; i < n; i ++){
    fin >> v[i];
    rmq[i][0] = v[i];
  }

  for(int i = 1; (1 << i) <= n; i ++){
    for(int j = 0; j + (1 << i) <= n; j ++){
      rmq[j][i] = min(rmq[j][i - 1], rmq[j + (1 << (i - 1))][i - 1]);
    }
  }

  ofstream fout ("rmq.out");
  for(int qi = 0; qi < q; qi ++){
    int a, b;
    fin >> a >> b;

    int pow = log2(b - a + 1);
    int minv = min(rmq[a][pow], rmq[b - (1 << pow) + 1][pow]);
    fout << minv << "\n";
  }

  fin.close();
  fout.close();

  if(DEBUG)
    for(int i = 0; (1 << i) <= n; i ++){
      for(int j = 0; j + (1 << i) <= n; j ++)
        printf("%d ", rmq[j][i]);
      printf("\n");
    }
  return 0;
}