Pagini recente » Cod sursa (job #1750339) | Cod sursa (job #3313400) | Cod sursa (job #827408) | Cod sursa (job #1689287) | Cod sursa (job #3350605)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int arr[100005],rmq[100005][20];
int32_t main()
{
int n,m;
cin>>n>>m;
for (int i=1; i<=n; i++) {cin>>arr[i]; rmq[i][1]=arr[i];}
for (int i=1; i<20; i++)
{
for (int j=1; j<=n-(1<<i)+1; j++) rmq[j][(1<<i)]=min(rmq[j][(1<<i-1)],rmq[j+(1<<i-1)][(1<<i-1)]);
}
for (int i=1; i<=m; i++)
{
int x,y;
cin>>x>>y;
if (x>y) swap(x,y);
int dif=y-x+1,p2=1;
while (p2*2<=dif) p2*=2;
cout<<min(rmq[x][p2],rmq[y-p2+1][p2])<<"\n";
}
}