Pagini recente » Cod sursa (job #732340) | Cod sursa (job #1171618) | Cod sursa (job #3036940) | Cod sursa (job #289949) | Cod sursa (job #3301640)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
pair <int,int> dp[22][100005];
int v[100005];
int lg[100005];
void PreCalc_Log(int n){
lg[1] = 0;
for (int i=2;i<=n;++i){
lg[i] = lg[i/2]+1;
}
}
int main()
{
int n,m;
fin >> n >> m;
for (int i=1;i<=n;++i){
fin >> v[i];
}
v[n+1] = 1e9;
for (int i=1;i<=n;++i){
dp[0][i] = min(make_pair(v[i],i),make_pair(v[i+1],i+1));
}
for (int i=1;i<20;++i){
for (int j=1;j<=n;++j){
if (j+(1<<i)>n) continue;
dp[i][j] = min(dp[i-1][j],dp[i-1][j+(1<<(i-1))]);
}
}
PreCalc_Log(n);
for (int i=1;i<=m;++i){
int L,R;
fin >> L >> R;
if (L==R){
fout << v[L] << '\n'; // caz particular
continue;
}
int p = lg[R-L];
pair <int,int> ans = min(dp[p][L],dp[p][R-(1<<p)]);
fout << ans.first << '\n';
}
return 0;
}