Pagini recente » Cod sursa (job #122436) | Cod sursa (job #2920758) | Cod sursa (job #1478233) | Cod sursa (job #1887642) | Cod sursa (job #2115171)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout("rmq.out");
const int N_MAX = 100000 + 5;
int lo, hi, n, m, dp[30][N_MAX], a[N_MAX];
void init(){
for(int i = 1; i<=n; ++i)
dp[0][i] = i;
for(int power = 1; (1<<power) <= n; ++power)
for(int i = 1; i + (1<<power) - 1 <= n; ++i)
if(a[dp[power-1][i]] < a[dp[power-1][i + (1 << (power-1) ) ]])
dp[power][i] = dp[power-1][i];
else
dp[power][i] = dp[power-1][i + (1 << (power-1))];
}
int query(int lo, int hi){
int power = log2(hi-lo+1);
if(a[dp[power][lo]] < a[dp[power][hi - (1 << power) + 1]])
return dp[power][lo];
return dp[power][hi - (1 << power) + 1];
}
int main(){
fin >> n >> m;
for(int i = 1; i<=n; ++i)
fin >> a[i];
init();
while(m--){
fin >> lo >> hi;
fout << a[query(lo, hi)] << "\n";
}
return 0;
}
//Andrei Muntean, 2018