Pagini recente » Cod sursa (job #1117736) | Borderou de evaluare (job #471567) | Cod sursa (job #837837) | Cod sursa (job #1760155) | Cod sursa (job #2755993)
#include <bits/stdc++.h>
using namespace std;
const int maxim = 100002, logaritm = 18;
int vec[maxim];
int matrice[maxim][logaritm];
int bin_log[maxim];
int coada(int stanga, int dreapta)
{
int lungime = dreapta - stanga + 1, loga = bin_log[lungime];
return min(matrice[stanga][loga], matrice[dreapta - (1 << loga) + 1][loga]);
}
int main()
{
int n, m, x, y;
ifstream f("rmq.in");
f >> n >> m;
for(int i = 0; i < n; i++){
f >> vec[i];
matrice[i][0] = vec[i];
}
for(int i = 2; i <= n; i++){
bin_log[i] = bin_log[i / 2];
}
for(int j = 1; j < logaritm; j++){
for(int i = 0; i + (1 << j) - 1 < n; i++){
matrice[i][j] = min(matrice[i][j - 1], matrice[i + (1 << (j - 1))][j - 1]);
}
}
ofstream g("rmq.out");
for(int i = 0; i < m; i++){
f >> x >> y;
g << coada(x - 1, y - 1) << '\n';
}
g.close();
f.close();
return 0;
}