Pagini recente » Cod sursa (job #1886776) | Cod sursa (job #389728) | Cod sursa (job #595816) | Cod sursa (job #652914) | Cod sursa (job #2376232)
#include <bits/stdc++.h>
#define Dim 100006
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N,M,V[Dim],rmq[Dim][18],lg[Dim];
int a,b;
int main()
{
f>>N>>M;
for(int i=1;i<=N;i++) f>>V[i];
lg[2]=1;
for(int i=3;i<=N;i++) lg[i]=lg[i>>1]+1;
for(int i=1;i<=N;i++) rmq[i][0]=i;
for(int j=1;(1<<j)<=N;j++)
for(int i=1;i+(1<<j)-1<=N;i++)
{
if(V[rmq[i][j-1]]<=V[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];
}
for(int i=1;i<=M;i++)
{
f>>a>>b;
int dif=b-a+1;
int pr=lg[dif];
if(V[rmq[a][pr]]<=V[rmq[b-(1<<pr)+1][pr]]) g<<V[rmq[a][pr]]<<'\n';
else g<<V[rmq[b-(1<<pr)+1][pr]]<<'\n';
}
return 0;
}