Cod sursa(job #1784755)

Utilizator Vally77FMI Calinescu Valentin Gelu Vally77 Data 20 octombrie 2016 14:36:06
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
#include <math.h>

using namespace std;
ifstream ka("rmq.in");
ofstream ki("rmq.out");

const int N_MAX = 100000;
const int SQRT_MAX = 317;
int a, b, n, m, x, v[N_MAX + 1], bb[SQRT_MAX + 1];

int main()
{
   ka >> n >> m;
   int t = (int)sqrt(n) + 1;
   for(int i = 0; i <= t; i++)
   	bb[i] = 0x7fffffff;
   for(int i = 1; i <= n; i++)
   {
      ka >> x;
      v[i] = x;
      bb[i / t] = min(bb[i / t], x);
   }
   for(int i = 1; i <= m; i++)
   {
      ka >> a >> b;
      int minim = 0x7fffffff;
      int j;
      for(j = a; j % t != 0; j++)
      	minim = min(minim, v[j]);
      for(; b - j > t; j += t)
        minim = min(minim, bb[j / t]);
      for(; j <= b; j++)
        minim = min(minim, v[j]);
      ki << minim << '\n';
   }
}