Pagini recente » Cod sursa (job #3355799) | Cod sursa (job #3285221) | Cod sursa (job #823570) | Cod sursa (job #507337) | Cod sursa (job #3350607)
#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][0]=arr[i];}
for (int i=1; i<20; i++)
{
for (int j=1; j<=n-(1<<i)+1; j++) rmq[j][i]=min(rmq[j][i-1],rmq[j+(1<<(i-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,pt=0;
while (p2*2<=dif) {p2*=2; pt++;}
cout<<min(rmq[x][pt],rmq[y-p2+1][pt])<<"\n";
}
}