Pagini recente » Cod sursa (job #2079157) | Cod sursa (job #443876) | Cod sursa (job #903944) | Cod sursa (job #533945) | Cod sursa (job #2348929)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout("rmq.out");
const int N_MAX = 100000 + 5;
int dp[25][N_MAX], a[N_MAX], n, m;
void prep(){
for(int i = 1; i <=n; ++i)
dp[0][i] = i;
for(int pow = 1; (1<<pow) <= n; ++pow)
for(int i = 1; i <= n - (1<<pow) + 1; ++i)
if(a[dp[pow-1][i]] > a[dp[pow-1][i + (1<<(pow-1))]])
dp[pow][i] = dp[pow-1][i +(1<<(pow-1))];
else
dp[pow][i] = dp[pow-1][i];
}
int query(int lo, int hi){
int pow = log2(hi-lo+1);
if(a[dp[pow][lo]] < a[dp[pow][hi - (1<<pow) + 1]])
return a[dp[pow][lo]];
else
return a[dp[pow][hi - (1<<pow) + 1]];
}
int main()
{
fin >> n >> m;
for(int i = 1; i <=n; ++i)
fin >> a[i];
prep();
while(m--){
int lo, hi;
fin >> lo >> hi;
fout << query(lo,hi) << "\n";
}
return 0;
}