Pagini recente » Borderou de evaluare (job #1578949) | Cod sursa (job #549932) | Cod sursa (job #3306470) | Cod sursa (job #782354) | Cod sursa (job #3305828)
#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]=j;
else dp[i][j]=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;
}