Pagini recente » Cod sursa (job #1654348) | Cod sursa (job #1621054) | Cod sursa (job #101782) | Cod sursa (job #2868877) | Cod sursa (job #3350606)
#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";
}
}