Pagini recente » Istoria paginii clasament-arhiva-monthly | Profil UBB_Popovici_Craciun_Patcas | Cod sursa (job #3279204) | Utilizatori inregistrati la Happy Coding 2007 | Cod sursa (job #3294901)
#include <iostream>
#include <vector>
#include <cmath>
#include <fstream>
using namespace std;
#define MAX 100000000
ifstream in("rmq.in");
ofstream out("rmq.out");
// Sparse Table
int log_n(int n) {
if (n <= 0) return 0;
int i = 0;
int p = 1;
while (p * 2 <= n) {
i++;
p *= 2;
}
return i;
}
int main() {
int n, Q;
in >> n >> Q;
vector<int> v(n);
for (int i = 0; i < n; i++) {
in >> v[i];
}
int log = log_n(n);
vector< vector<int> > sparse (n, vector<int>(log + 1));
for (int i = 0; i < n; i++)
sparse[i][0] = v[i];
for (int j = 1; j <= log; j++)
for (int i = 0; i < n; i++)
if (i + (1 << j) - 1 < n)
sparse[i][j] = min(sparse[i][j - 1], sparse[i + (1 << (j - 1))][j - 1]);
else
sparse[i][j] = MAX;
for (int querry = 0; querry < Q; querry++) {
int i, j; in >> i >> j; i--; j--;
int Min, logij = log_n(j - i + 1);
Min = min(sparse[i][logij], sparse[j - (1 << logij) + 1][logij]);
out << Min << endl;
// 0 - 6
// 2
// 0 -> 3 2 -> 6
}
return 0;
}