Pagini recente » Cod sursa (job #314184) | Cod sursa (job #341003) | Cod sursa (job #440808) | Cod sursa (job #3244101) | Cod sursa (job #2121127)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int maxn=100005;
const int maxk=20;
int n,m,rmq[maxk][maxn],lg[maxn];
int remq(int x,int y)
{
if(x>y)
swap(x,y);
int k=lg[y-x+1];
int sol=rmq[k][x];
if(rmq[k][y-(1<<k)+1]<sol)
sol=rmq[k][y-(1<<k)+1];
return sol;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
fin>>rmq[0][i];
for(int i=2;i<=n;i++)
lg[i]=lg[i>>1]+1;
for(int k=1;(1<<k)<=n;k++)
for(int i=1;i+(1<<k)-1<=n;i++ )
rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+(1<<(k-1))]);
while(m--)
{
int x,y;
fin>>x>>y;
fout<<remq(x,y)<<'\n';
}
return 0;
}