Pagini recente » Cod sursa (job #2064659) | Cod sursa (job #373323) | Cod sursa (job #1840310) | Cod sursa (job #876099) | Cod sursa (job #1217920)
#include<fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int nmax = 100010;
int n,m,a[nmax],rmq[nmax][20],lg[nmax];
int main()
{
cin>>n>>m;
int i,j;
for (i=1;i<=n;i++) cin>>a[i];
//preprocesarea
for (i=1;i<=n;i++) rmq[i][0]=i;
for (j=1;(1<<j)<=n;j++)
for (i=1; (i+(1<<j)-1<=n);i++)
if (a[rmq[i][j-1]]<a[rmq[i+(1<<(j-1))][j-1]])
rmq[i][j]=rmq[i][j-1];
else rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
while (m--)
{
int i,j;
cin>>i>>j;
int k=0;
while ((1<<k)<=(j-i+1)) k++; k--;
cout<<min(a[rmq[i][k]],a[rmq[j-(1<<k)+1][k]])<<"\n";
}
return 0;
}