Pagini recente » Cod sursa (job #2532198) | Cod sursa (job #371408) | Cod sursa (job #3263671) | Cod sursa (job #694422) | Cod sursa (job #2763100)
#include <fstream>
#define NMAX 100005
#define MMAX 1000005
#define PMAX 17
#define INF 1e9
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n,m;
int v[NMAX];
int rmq[NMAX][PMAX];
int lg[NMAX];
int main()
{
cin>>n>>m;
lg[0]=-1;///artificial
v[0]=INF;
for(int i=1;i<=n;i++)
{
cin>>v[i];
rmq[i][0]=i;
lg[i]=lg[i/2]+1;
}
for(int p=1;(1 << p)<=n;p++)
for(int i=1;i +(1 << p)-1<=n;i++)
{
if(v[rmq[i][p-1]]<v[rmq[i][p]])
rmq[i][p]=rmq[i][p-1];
if(v[rmq[i+(1 << (p-1) )][p-1]]<v[rmq[i][p]])
rmq[i][p]=rmq[i+(1 << (p-1) )][p-1];
}
for(int i=1;i<=m;i++)
{
int st,dr,L,rasp=INF,dif;
cin>>st>>dr;
if(st>dr)
swap(st,dr);
L=dr-st+1;
dif=L-(1 << lg[L]);
cout<<min(v[rmq[st][lg[L]]],v[rmq[st+dif][lg[L]]])<<'\n';
}
return 0;
}