Cod sursa(job #1205631)

Utilizator PaueyPaula Nicoleta Gradu Pauey Data 7 iulie 2014 15:28:11
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int v[100001];
int m[20][100001];

int main()
{
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    int n, nr, x, y, k;
    cin >> n >> nr;
    for(int i = 1; i <= n; ++i) {
      cin >> v[i];
      m[0][i] = v[i];
    }
    for(int j = 1; (1 << j) <= n; ++j)
       for(int i = 1; i <= n - (1 << j) + 1; ++i) {
          m[j][i] = min(m[j - 1][i], m[j - 1][i + (1 << (j - 1))]);
       }
    for(int i = 1; i <= nr; ++i) {
      cin >> x >> y;
      for(k = 0; (1 << k) <= y - x + 1; ++k);
      --k;
      cout << min(m[k][x], m[k][y - (1 << k) + 1]) << '\n';
    }
    return 0;
}