Pagini recente » Cod sursa (job #1499627) | Cod sursa (job #1917896) | Cod sursa (job #2874122) | Cod sursa (job #2189862) | Cod sursa (job #2868973)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define NMAX 100005
#define PMAX 20
int n, q, x, y, arr[NMAX], lookup[NMAX][PMAX];
void preprocess()
{
for (int i=1;i<n;i++){
lookup[i][0] = i;
}
for (int j=1;(1<<j)<=n;j++){
for (int i=0;(i+(1<<j)-1)<n;i++){
if (arr[lookup[i][j-1]] < arr[lookup[i+(1<<(j-1))][j-1]]){
lookup[i][j] = lookup[i][j-1];
}else{
lookup[i][j] = lookup[i+(1<<(j-1))][j-1];
}
}
}
}
int main() {
fin >> n >> q;
for (int i=0;i<n;i++){
fin >> arr[i];
}
preprocess();
for (int i=1;i<=q;i++){
fin >> x >> y;
x --;
y --;
int j = (int)log2(y - x + 1);
if (arr[lookup[x][j]] <= arr[lookup[y-(1<<j)+1][j]]){
fout << arr[lookup[x][j]] << '\n';
}else{
fout << arr[lookup[y-(1<<j)+1][j]] << '\n';
}
}
return 0;
}