Pagini recente » Cod sursa (job #2387389) | Cod sursa (job #2793642) | Cod sursa (job #8986) | Cod sursa (job #2234152) | Cod sursa (job #3146386)
#include <iostream>
#include <fstream>
using namespace std;
const int NMAX = 100001;
const int LOGMAX = 17;
int a[NMAX];
int tabel[NMAX][LOGMAX];
int lg2[NMAX];
void precalc(int n){
lg2[1] = 0;
for(int i = 2; i <= n; i++){
lg2[i] = lg2[i/2]+1;
}
}
void build(int n){
for(int i = 0; i < n; i++){
tabel[i][0] = a[i];
}
for(int p = 1; p <= LOGMAX; p++){
for(int i = 0; i + (1 << p) - 1 < n; i++){
tabel[i][p] = min(tabel[i][p-1], tabel[i + (1 << (p-1))][p-1]);
}
}
}
int query(int left, int right){
int len, log;
len = right - left + 1;
log = lg2[len];
return min(tabel[left][log], tabel[right - (1 << log) + 1][log]);
}
int main()
{
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
fin >> n >> m;
for(int i = 0; i < n; i++){
fin >> a[i];
}
precalc(n);
build(n);
for(int i = 0; i < m; i++){
int a, b;
fin >> a >> b;
fout << query(a-1, b-1) << "\n";
}
fin.close();
fout.close();
return 0;
}