Pagini recente » Monitorul de evaluare | Cod sursa (job #1595407) | Cod sursa (job #546561) | Cod sursa (job #2673362) | Cod sursa (job #3208467)
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define eb emplace_back
#define pii pair<int, int>
#define tpl tuple<int, int, int>
#define oo INT_MAX / 2
using namespace std;
const string fn("rmq");
ifstream in(fn + ".in");
ofstream out(fn + ".out");
#define cin in
#define cout out
int rmq[18][100005],n,q,Log[100005];
int qrmq(int l,int r)
{
int k=Log[r-l+1];
return min(rmq[k][l+(1<<k)-1],rmq[k][r]);
}
int main()
{
cin>>n>>q>>rmq[0][1];
Log[1]=0;
for(int i=2;i<=n;i++)
cin>>rmq[0][i],Log[i]=Log[i/2]+1;
for(int i=1;(1<<i)<=n;i++)
for(int j=(1<<i);j<=n;j++)
{
int k=(1<<(i-1));
rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j-k]);
}
while(q--)
{
int l,r;
cin>>l>>r;
cout<<qrmq(l,r)<<'\n';
}
return 0;
}