Pagini recente » Cod sursa (job #2943639) | Cod sursa (job #785468) | Cod sursa (job #1761346) | Cod sursa (job #767165) | Cod sursa (job #3305829)
#include <iostream>
#include<fstream>
using namespace std;ifstream fin("rmq.in");ofstream fout("rmq.out");
int n,m,log[100001],dp[20][1000001],st,dr,p,i,v[100001],j;
int main()
{
fin>>n>>m;for(i=2;i<=n;i++)log[i]=log[i/2]+1;
for(i=1;i<=n;i++)fin>>v[i];
for(i=1;i<=n;i++)dp[0][i]=i;
for(i=1;i<=log[n];i++){
for(j=1;j<=n;j++){
if(j+(1<<i)-1>n)break;
if(v[dp[i-1][j]]<v[dp[i-1][j+(1<<(i-1))]])dp[i][j]=dp[i-1][j];
else dp[i][j]=dp[i-1][j+(1<<(i-1))];
}
}while(m--){
fin>>st>>dr;
p=log[dr-st+1];
fout<<min(v[dp[p][st]],v[dp[p][dr-(1<<p)+1]])<<'\n';
}
return 0;
}