Pagini recente » Cod sursa (job #1161161) | Cod sursa (job #553251) | Cod sursa (job #886184) | Cod sursa (job #2649592) | Cod sursa (job #3287307)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int lookup_table[100001][20] = {};
int main()
{
int n, m;
fin >> n >> m;
int szamok[100001] = {};
for(int i = 1; i <= n; i++){
fin >> szamok[i];
}
int lg[100001] = {};
lg[1] = 0;
for(int i = 1; i <= n; i++){
lg[i] = lg[i/2] + 1;
}
for(int i = 1; i <= n; i++){
lookup_table[i][0] = szamok[i];
}
for(int j = 1; (1 << j) <= n; j++){
for(int i = 1; i + (1 << j) - 1 <= n; i++){
lookup_table[i][j] = min(lookup_table[i][j-1], lookup_table[i+(1 << (j-1))][j-1]);
}
}
for(int query = 0; query < m; query++){
int l, r;
fin >> l >> r;
int diff = r-l+1;
int exponent = lg[diff]-1;
int closest_power = (1 << exponent);
fout << min(lookup_table[l][exponent], lookup_table[r-closest_power+1][exponent]) << endl;
}
return 0;
}