Pagini recente » Cod sursa (job #3293245) | Cod sursa (job #2779917) | Cod sursa (job #417262) | Cod sursa (job #12617) | Cod sursa (job #2480325)
#include <fstream>
#include <math.h>
#include <stdlib.h>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int x[100005],n,m,i,r[100005][20],j,a,b;
void elkeszit()
{
int l;
for(i=0;i<n;++i) r[i][0]=i;
for(j=1;(1<<j)<=n;++j)
for(i=0;i<n;++i)
{
l=min(n-1,i+(1<<(j-1)));
if(x[r[i][j-1]]<x[r[l][j-1]])
r[i][j]=r[i][j-1];
else r[i][j]=r[l][j-1];
}
}
int rmq(int a, int b)
{
int k,l,m;
k=log2(b-a+1);
if(x[r[a][k]]<=x[r[b-(1<<k)+1][k]])
return r[a][k];
else return r[b-(1<<k)+1][k];
}
int main()
{
cin>>n>>m;
for(i=0;i<n;++i)
cin>>x[i];
elkeszit();
for(i=1;i<=m;++i)
{
cin>>a>>b;
cout<<x[rmq(a-1,b-1)]<<"\n";
}
return 0;
}